web-dev-qa-db-ja.com

Java 11:JAXB-APIの実装がモジュールパスまたはクラスパスで見つかりませんでした

実行させると例外が発生する小さなプロジェクトがあります。

問題はここにあります(TestObject.Java):

final JAXBContext jaxbContext = JAXBContext.newInstance(...);

これがなぜ例外をスローするのか、私には本当にわかりません。チャームのように機能するテスト(TestTest.Java)も作成しました。名前を許してください、これはこれをJava 11.で動作させるための小さなテストアプリケーションです。

私はこれに従いました: javax.xml.bind.JAXBException JAXB-APIの実装がモジュールパスまたはクラスパスで見つかりません と追加しました

compile('javax.xml.bind:jaxb-api:2.3.0')
compile('javax.activation:activation:1.1')
compile('org.glassfish.jaxb:jaxb-runtime:2.3.0')

私のbuild.gradleに、それからそれは不平を言う

Error:Java: module not found: Java.activation

不足している。これもJava 11から削除されるため、11個追加しました:

compile 'com.Sun.activation:javax.activation:1.2.0'

しかし、それは多くのエラーをスローします:

Error:Java: the unnamed module reads package com.Sun.xml.bind from both jaxb.runtime and jaxb.core
Error:Java: the unnamed module reads package com.Sun.xml.bind.util from both jaxb.runtime and jaxb.core
Error:Java: the unnamed module reads package com.Sun.xml.bind.marshaller from both jaxb.runtime and jaxb.core
Error:Java: the unnamed module reads package com.Sun.xml.bind.api from both jaxb.runtime and jaxb.core
Error:Java: the unnamed module reads package com.Sun.xml.bind.v2 from both jaxb.runtime and jaxb.core
Error:Java: the unnamed module reads package com.Sun.xml.bind.v2.util from both jaxb.runtime and jaxb.core
Error:Java: the unnamed module reads package com.Sun.xml.bind.v2.model.impl from both jaxb.runtime and jaxb.core
Error:Java: the unnamed module reads package com.Sun.xml.bind.v2.model.annotation from both jaxb.runtime and jaxb.core
Error:Java: the unnamed module reads package com.Sun.xml.bind.v2.runtime from both jaxb.runtime and jaxb.core
Error:Java: the unnamed module reads package com.Sun.xml.bind.v2.runtime.unmarshaller from both jaxb.runtime and jaxb.core
Error:Java: the unnamed module reads package com.Sun.xml.bind.unmarshaller from both jaxb.runtime and jaxb.core
Error:Java: module jaxb.runtime reads package com.Sun.xml.bind from both jaxb.core and jaxb.runtime
Error:Java: module jaxb.runtime reads package com.Sun.xml.bind.util from both jaxb.core and jaxb.runtime
Error:Java: module jaxb.runtime reads package com.Sun.xml.bind.marshaller from both jaxb.core and jaxb.runtime
Error:Java: module jaxb.runtime reads package com.Sun.xml.bind.api from both jaxb.core and jaxb.runtime
Error:Java: module jaxb.runtime reads package com.Sun.xml.bind.v2 from both jaxb.core and jaxb.runtime
Error:Java: module jaxb.runtime reads package com.Sun.xml.bind.v2.util from both jaxb.core and jaxb.runtime
Error:Java: module jaxb.runtime reads package com.Sun.xml.bind.v2.model.impl from both jaxb.core and jaxb.runtime
Error:Java: module jaxb.runtime reads package com.Sun.xml.bind.v2.model.annotation from both jaxb.core and jaxb.runtime
Error:Java: module jaxb.runtime reads package com.Sun.xml.bind.v2.runtime from both jaxb.core and jaxb.runtime
Error:Java: module jaxb.runtime reads package com.Sun.xml.bind.v2.runtime.unmarshaller from both jaxb.core and jaxb.runtime
Error:Java: module jaxb.runtime reads package com.Sun.xml.bind.unmarshaller from both jaxb.core and jaxb.runtime
Error:Java: module jaxb.core reads package com.Sun.xml.bind from both jaxb.core and jaxb.runtime

私にとってとても混乱しているのは、テストが機能することです。したがって、junit5環境にはなんらかのjaxb実装があるようです。 Java 8アプリをJava 9モジュールに移行する方法で他の情報も見つけました。

compile group: 'javax.xml.bind', name: 'jaxb-api', version: '2.4.0-b180830.0359'
compile group: 'org.glassfish.jaxb', name: 'jaxb-runtime', version: '2.4.0-b180830.0438'
compile group: 'org.glassfish.jaxb', name: 'jaxb-xjc', version: '2.4.0-b180830.0438'

しかし、これも機能していません。誰かがその実行を手伝ってくれるなら、私はとても幸せです。 Fedora 29、64ビットでJava-openjdk-11.0.1.13-11.rolling.fc29.x86_64を使用しています。

ps .:トピック「javax.xml.bind.JAXBException ...」を含む投稿のコメントにすべてを書きたかったのですが、許可されていませんでした。だから私はこの新しい投稿を作成しました。

編集:そのサンプルアプリケーションでスローされる例外はこれです:

Exception in thread "main" Java.lang.RuntimeException: javax.xml.bind.JAXBException: Implementation of JAXB-API has not been found on module path or classpath.
 - with linked exception:
[Java.lang.ClassNotFoundException: com.Sun.xml.bind.v2.ContextFactory]
    at test/com.example.TestObject.doSomething(TestObject.Java:21)
    at test/com.example.TestObject.main(TestObject.Java:12)
Caused by: javax.xml.bind.JAXBException: Implementation of JAXB-API has not been found on module path or classpath.
 - with linked exception:
[Java.lang.ClassNotFoundException: com.Sun.xml.bind.v2.ContextFactory]
    at Java.xml.bind/javax.xml.bind.ContextFinder.newInstance(ContextFinder.Java:269)
    at Java.xml.bind/javax.xml.bind.ContextFinder.find(ContextFinder.Java:412)
    at Java.xml.bind/javax.xml.bind.JAXBContext.newInstance(JAXBContext.Java:721)
    at Java.xml.bind/javax.xml.bind.JAXBContext.newInstance(JAXBContext.Java:662)
    at test/com.example.TestObject.doSomething(TestObject.Java:17)
    ... 1 more
Caused by: Java.lang.ClassNotFoundException: com.Sun.xml.bind.v2.ContextFactory
    at Java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.Java:583)
    at Java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.Java:178)
    at Java.base/Java.lang.ClassLoader.loadClass(ClassLoader.Java:521)
    at Java.xml.bind/javax.xml.bind.ServiceLoaderUtil.nullSafeLoadClass(ServiceLoaderUtil.Java:122)
    at Java.xml.bind/javax.xml.bind.ServiceLoaderUtil.safeLoadClass(ServiceLoaderUtil.Java:155)
    at Java.xml.bind/javax.xml.bind.ContextFinder.newInstance(ContextFinder.Java:267)
    ... 5 more
5
J. Doe

Maven-dependencyを削除com.Sun.xml.bindモジュール式ではない外部ライブラリから、the unnamed module reads package com.Sun.xml.bind.util 行っている。

0
Filomat

私は信じている Java.lang.ClassNotFoundExceptionは、複数のバージョンが定義を定義できないために来ています。

解決策:削除com.Sun.xmlフォルダーをローカルのm2リポジトリーからダウンロードし、依存関係を1つだけダウンロードします。

pom/gradleのjavax.xml.bind:jaxb-api: "latest-version"。

0
Amandeep Singh