NoClassDefFoundError:由于缺少依赖项javax/xml/bind/Unmarshaller,无法加载groovy.xml.jaxb.JaxbGroovyMethods类
我们的Gradle构建有NoClassDefFoundError:由于缺少依赖项javax/xml/bind/Unmarshaller,无法加载groovy.xml.jaxb.JaxbGroovyMethods类,java,gradle,groovy,java-9,java-11,Java,Gradle,Groovy,Java 9,Java 11,我们的Gradle构建有——在JavaCompile中添加modules=java.xml.bind、java.activation、java.xml.ws.annotation到options.compilerArgs以使用JDK9/10构建。现在这很好用,但是这些模块已经被弃用了 我想为JDK11做准备 我已经尝试将javax.xml.bind:jaxb-api:2.3.0,com.sun.xml.bind:jaxb-impl:2.3.0和com.sun.xml.bind:jaxb-core
——在JavaCompile
中添加modules=java.xml.bind、java.activation、java.xml.ws.annotation
到options.compilerArgs
以使用JDK9/10构建。现在这很好用,但是这些模块已经被弃用了
我想为JDK11做准备
我已经尝试将javax.xml.bind:jaxb-api:2.3.0
,com.sun.xml.bind:jaxb-impl:2.3.0
和com.sun.xml.bind:jaxb-core:2.3.0
添加到编译和运行时以及buildscript
中的类路径,但我仍然得到nocsdeffounderror
我错过了什么
* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':my-client:compileGroovy'.
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:103)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:73)
at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:59)
at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
at org.gradle.api.internal.tasks.execution.ResolveBuildCacheKeyExecuter.execute(ResolveBuildCacheKeyExecuter.java:66)
at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:59)
at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:101)
at org.gradle.api.internal.tasks.execution.FinalizeInputFilePropertiesTaskExecuter.execute(FinalizeInputFilePropertiesTaskExecuter.java:44)
at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:91)
at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:62)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:59)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.run(DefaultTaskGraphExecuter.java:256)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:317)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:309)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:185)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:97)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:249)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:238)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:104)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:98)
at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:663)
at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:596)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:98)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
Caused by: java.lang.NoClassDefFoundError: Unable to load class groovy.xml.jaxb.JaxbGroovyMethods due to missing dependency javax/xml/bind/Unmarshaller
at org.gradle.api.internal.tasks.compile.ApiGroovyCompiler.execute(ApiGroovyCompiler.java:175)
at org.gradle.api.internal.tasks.compile.ApiGroovyCompiler.execute(ApiGroovyCompiler.java:56)
at org.gradle.api.internal.tasks.compile.GroovyCompilerFactory$DaemonSideCompiler.execute(GroovyCompilerFactory.java:74)
at org.gradle.api.internal.tasks.compile.GroovyCompilerFactory$DaemonSideCompiler.execute(GroovyCompilerFactory.java:62)
at org.gradle.api.internal.tasks.compile.daemon.AbstractDaemonCompiler$CompilerCallable.call(AbstractDaemonCompiler.java:88)
at org.gradle.api.internal.tasks.compile.daemon.AbstractDaemonCompiler$CompilerCallable.call(AbstractDaemonCompiler.java:76)
at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:42)
at org.gradle.workers.internal.WorkerDaemonServer.execute(WorkerDaemonServer.java:46)
at org.gradle.workers.internal.WorkerDaemonServer.execute(WorkerDaemonServer.java:30)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at org.gradle.process.internal.worker.request.WorkerAction.run(WorkerAction.java:101)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:155)
at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:137)
at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
... 3 more
报告的缺失类对于每个构建不是100%相同:它在抱怨javax/xml/bind/JAXBContext
、javax/xml/bind/Unmarshaller
和javax/xml/bind/Marshaller
构建中的这一行之间切换。gradle
依赖关系解决了我的这个确切问题:
compile group: 'javax.xml.bind', name: 'jaxb-api', version: '2.3.0'
好的,这就解决了,可能是由于新的Groovy(2.5.1)和Gradle(4.7)依赖项。我无法告诉您如何正确解决问题,但我可以提出一个解决方法:将您的JDK_JAVAC_OPTIONS
环境变量设置为--addmodules java.xml.bind
@ZhekaKozlov--add modules java.xml.bind
JDK/11不需要,对吗?还有,你查过了吗?很高兴看到您使用的build.gradle
依赖项。@neu242我对gradle几乎一无所知,所以这些都是猜测。。。我最多可以想到三个可能需要这些依赖关系的活动部分:(a)Gradle进程本身,(b)为编译启动的进程,(c)正在编译的源代码。我猜(b)是这样的-你确定你已经把这些罐子加到(b)了吗?我会使用完整的调试输出运行Gradle,并希望找出这些JAR的确切显示位置。@neu242您使用完整的调试输出运行了吗?如果您使用Maven实现了这一点,它将向您显示用于每个进程的确切类路径。这至少可以回答这个问题,JAR是否最终位于正确的位置。对于那些有足够分数并且喜欢使用groovy的人,请投票支持重新开始这个问题。这是一个非常特殊的错误,在2.5.1/2.5.2中修复了它。但对我来说不是:(我想知道我的设置有什么问题……groovy版本是什么?2.5.2?在撰写本文时,我使用的是groovy 2.5.0和Gradle 4.7。当问题解决时,我使用的是groovy 2.5.1和Gradle 4.10。这是正确的。创建2.5.1是为了解决您提到的问题。