2017-09-22 2 views
2

L'objectif schemagen du jaxb2-maven-plugin échoue sur Java 9. L'erreur est:jaxb2-maven-plugin ne Java 9

[Exception]: java.lang.ClassNotFoundException 
[Message]: com.sun.istack.SAXParseException2 
  • La version plugin jaxb2 est 2.3.1
  • La version maven est 3.5.0.
  • La version du plugin du compilateur maven est 3.7.0.
  • Tous les plugins/dépendances sont à jour.

Je n'ai aucun fichier module-info.java. Les projets que je construis sont des projets Java 8 hérités, où le JDK a été mis à jour de 1.8u144 à la version 9.

Heureusement, le seul plugin qui échoue à ce moment est le plugin jaxb2-maven. Tout le reste est OK, tant au moment de la compilation qu'à l'exécution. La trace de la pile est:

org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:50) 
org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass(ClassRealm.java:271) 
org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:247) 
org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:239) 
com.sun.tools.jxc.ap.SchemaGenerator.process(SchemaGenerator.java:103) 
jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:968) 
jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:884) 
jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.access$2200(JavacProcessingEnvironment.java:108) 
jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1206) 
jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1315) 
jdk.compiler/com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1246) 
jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:922) 
jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.lambda$doCall$0(JavacTaskImpl.java:100) 
jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.handleExceptions(JavacTaskImpl.java:142) 
jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:96) 
jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:90) 
com.sun.tools.jxc.SchemaGenerator$Runner.compile(SchemaGenerator.java:261) 
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
java.base/java.lang.reflect.Method.invoke(Method.java:564) 
com.sun.tools.jxc.SchemaGenerator.run(SchemaGenerator.java:166) 
org.codehaus.mojo.jaxb2.schemageneration.AbstractXsdGeneratorMojo.performExecution(AbstractXsdGeneratorMojo.java:372) 
org.codehaus.mojo.jaxb2.AbstractJaxbMojo.execute(AbstractJaxbMojo.java:257) 
org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134) 
org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208) 
org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:154) 
org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:146) 
org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:117) 
org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:81) 
org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51) 
org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128) 
org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:309) 
org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:194) 
org.apache.maven.DefaultMaven.execute(DefaultMaven.java:107) 
org.apache.maven.cli.MavenCli.execute(MavenCli.java:993) 
org.apache.maven.cli.MavenCli.doMain(MavenCli.java:345) 
org.apache.maven.cli.MavenCli.main(MavenCli.java:191) 
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
java.base/java.lang.reflect.Method.invoke(Method.java:564) 
org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289) 
org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229) 
org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415) 
org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356) 
+0

Vous pouvez lire [Comment exprimer une dépendance sur les fonctionnalités java-ee dans Java9] (https://stackoverflow.com/questions/46084751/how-to-express-dependency-in-maven-on-java- ee-features-for-transition-to-java-9) – nullpointer

+0

Ajout de --add-modules javax.xml.bind échoue tôt avec: module introuvable: javax.xml.bind. L'ajout de --add-modules java.se.ee sans dépendances supplémentaires pour le plugin jaxb2-maven (comme dans la solution proposée) ne résout pas non plus le problème. –

+0

Pourriez-vous partager votre 'module-info.java' et le' pom.xml' pour le module dans ce cas? – nullpointer

Répondre

1

je pourrais résoudre le problème en ajoutant les dépendances suivantes au plugin:

<dependencies> 
    <dependency> 
     <groupId>org.glassfish.jaxb</groupId> 
     <artifactId>jaxb-jxc-jdk9</artifactId> 
     <version>2.3.0</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.activation</groupId> 
     <artifactId>javax.activation-api</artifactId> 
     <version>1.2.0</version> 
    </dependency> 
</dependencies> 

Pour l'objectif xjc, je suppose qu'il est nécessaire d'ajouter les dépendances suivantes à la plugin:

<dependencies> 
    <dependency> 
     <groupId>org.glassfish.jaxb</groupId> 
     <artifactId>jaxb-xjc-jdk9</artifactId> 
     <version>2.3.0</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.activation</groupId> 
     <artifactId>javax.activation-api</artifactId> 
     <version>1.2.0</version> 
    </dependency> 
</dependencies> 

Bien sûr, il s'agit d'une solution de contournement jusqu'à la publication d'une nouvelle version du plug-in.

+0

Cette réponse résout l'échec du plugin sur Java 9 (kudos!), Mais expose un autre problème. Le schéma XML généré n'a pas de préfixe spécifié pour les éléments de schéma XML (par exemple schema, element, complexType, simpleType), ce qui provoque des problèmes lors de la tentative d'analyse de celui-ci. Ce problème ne se pose pas lors de l'utilisation de jaxb2-maven-plugin sur Java 8. Java 9 a-t-il été modifié par rapport à la commande de schéma XML? –