web-dev-qa-db-fra.com

Java 11: l'implémentation de JAXB-API n'a pas été trouvée sur le chemin du module ou le chemin de classe

J'ai un petit projet qui jette une exception lorsque je le laisse s'exécuter.

Le problème est ici (TestObject.Java):

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

Je ne comprends vraiment pas pourquoi cela lève l'exception. J'ai également créé un test qui fonctionne comme un charme (TestTest.Java). Veuillez me pardonner les noms, mais ce n'est qu'une petite application de test pour que cela fonctionne avec Java 11.

J'ai suivi ceci: javax.xml.bind.JAXBException L'implémentation de JAXB-API n'a pas été trouvée sur le chemin du module ou le chemin de classe et ajouté

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

à mon build.gradle mais il se plaint que

Error:Java: module not found: Java.activation

est manquant. Comme cela est également supprimé de Java 11 j'ai ajouté:

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

mais ensuite ça jette beaucoup d'erreurs:

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

Ce qui me dérange tellement: le test fonctionne. Il semble donc qu'il existe une sorte d'implémentation jaxb dans l'environnement junit5. J'ai également trouvé d'autres informations sur la migration d'une application Java 8 vers Java 9 modules, où j'ai trouvé ceci:

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'

Mais cela ne fonctionne pas non plus. Je serais très heureux si quelqu'un pouvait m'aider à le faire fonctionner. J'utilise Java-openjdk-11.0.1.13-11.rolling.fc29.x86_64 sur Fedora 29, 64 bits.

ps.: je voulais écrire tout cela dans le commentaire du post avec le sujet "javax.xml.bind.JAXBException ..." mais je n'y étais pas autorisé. J'ai donc créé ce nouveau message.

edit: l'exception qui est levée dans cet exemple d'application est la suivante:

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

Suppression de la dépendance maven com.Sun.xml.bind de ma bibliothèque externe qui n'est pas modulaire et beaucoup d'erreurs comme the unnamed module reads package com.Sun.xml.bind.util est parti.

0
Filomat

Je crois Java.lang.ClassNotFoundException arrive car plusieurs versions ne sont pas en mesure de définir la définition.

Solution: supprimez com.Sun.xml dossier à partir de votre référentiel m2 local, et téléchargez une seule dépendance.

javax.xml.bind: jaxb-api: "dernière version" en pom/gradle.

0
Amandeep Singh