2017-09-22 5 views
2

는 오류가 경우 : JAXB2 플러그인 버전은 2.3.1JAXB2 - 받는다는 - 플러그인 자바에 실패 9 JAXB2 - 받는다는 - 플러그인의에서는 schemagen 목표는 자바 9. 에 실패

[Exception]: java.lang.ClassNotFoundException 
[Message]: com.sun.istack.SAXParseException2 
  • 입니다
  • 메이븐 버전은 3.5.0입니다.
  • maven 컴파일러 플러그인 버전은 3.7.0입니다.
  • 모든 플러그인/종속성이 최신입니다.

module-info.java 파일이 없습니다. 내가 구축 한 프로젝트는 JDK가 1.8u144에서 버전 9로 업그레이드 된 레거시 Java 8 프로젝트입니다.

이 시점에서 실패하는 유일한 플러그인은 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) 
+0

[Java9에서 java-ee 기능에 대한 의존성을 표현하는 방법] (https://stackoverflow.com/questions/46084751/how-to-express-dependency-in-maven-on-java- ee-features-for-transition-to-java-9) – nullpointer

+0

--add-modules javax.xml.bind를 추가하면 초기에 실패합니다 : module not found : javax.xml.bind. jaxb2-maven-plugin에 대한 추가 종속성없이 --add-modules java.se.ee를 추가하면 (제안 된 해결책 에서처럼) 문제가 해결되지 않습니다. –

+0

모듈의'module-info.java'와'pom.xml'도 공유 할 수 있습니까? – nullpointer

답변

1

내가 플러그인에 다음 종속성을 추가하여 문제를 해결할 수있는 다음 xjc를 목표에 대한

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

, 나는이에 다음 종속성을 추가하는 데 필요한 가정 플러그인 :

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

물론 이것은 새로운 버전의 플러그인이 출시 될 때까지 해결 방법입니다.

+0

이 대답은 Java 9에서 플러그인 실패를 수정하지만 다른 문제점이 드러납니다. 생성 된 XML 스키마에는 XML 스키마 요소 (예 : schema, element, complexType, simpleType)에 대해 지정된 접두어가 없으므로 생성 된 구문 분석시 문제가 발생합니다. Java 8에서 jaxb2-maven-plugin을 사용할 때이 문제가 발생하지 않습니다. Java 9가 XML 스키마 마샬링과 관련하여 변경 되었습니까? –