実行させると例外が発生する小さなプロジェクトがあります。
問題はここにあります(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
Maven-dependencyを削除com.Sun.xml.bind
モジュール式ではない外部ライブラリから、the unnamed module reads package com.Sun.xml.bind.util
行っている。
私は信じている Java.lang.ClassNotFoundException
は、複数のバージョンが定義を定義できないために来ています。
解決策:削除com.Sun.xml
フォルダーをローカルのm2リポジトリーからダウンロードし、依存関係を1つだけダウンロードします。
pom/gradleのjavax.xml.bind:jaxb-api: "latest-version"。