首页 文章

jaxb2-maven-plugin在java 9上失败了

提问于
浏览
3

jaxb2-maven-plugin的schemagen目标在Java 9上失败 . 错误是:

[Exception]: java.lang.ClassNotFoundException
[Message]: com.sun.istack.SAXParseException2
  • jaxb2插件版本是2.3.1

  • maven版本是3.5.0 .

  • maven编译器插件版本是3.7.0 .

  • 所有插件/依赖项都是最新的 .

我没有任何module-info.java文件 . 我构建的项目是遗留Java 8项目,其中JDK已从1.8u144升级到版本9 .

希望目前唯一失败的插件是jaxb2-maven-plugin . 在编译时和执行时,其他一切都没问题 . 堆栈跟踪是:

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)

2 回答

  • 2

    我可以通过向插件添加以下依赖项来解决问题:

    <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>
    

    对于xjc目标,我假设需要在插件中添加以下依赖项:

    <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>
    

    当然,这是一个解决方法,直到发布新版本的插件 .

  • 1

    我终于直接解决了使用xjc的问题:

    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.6.0</version>
        <executions>
            <execution>
                <id>execute xjc</id>
                <phase>generate-sources</phase>
                <goals>
                    <goal>exec</goal>
                </goals>
                <configuration>
                    <executable>xjc</executable>
                    <longModulepath>false</longModulepath>
                    <arguments>
                        <argument>-extension</argument>
                        <argument>-no-header</argument>
                        <argument>-d</argument>
                        <argument>src/main/java</argument>
    
                        <argument>-p</argument>
                        <argument>my.package.name</argument>
                        <argument>-b</argument>
                        <argument>src/main/resources/mybindings.xjb</argument>
                        <argument>src/main/resources/myschema.xsd</argument>
                    </arguments>
                </configuration>
            </execution>
        </executions>
    </plugin>
    

相关问题