javax/xml/bind/JAXBException 使用 gradle 构建

viv*_*ino 5 java android gradle

我正在尝试更新到 gradle 5.4 以及 JDK 11,但在构建时遇到错误:

 Task :app:compileDesarrolloDebugJavaWithJavac FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:compileDesarrolloDebugJavaWithJavac'.
> javax/xml/bind/JAXBException
Run Code Online (Sandbox Code Playgroud)

我一直在寻找一些解决方案,我发现我必须在 app/build.gradle 上添加一些依赖项,因为 Java 9+ 不再安装 jre:

compile group: 'javax.xml.bind', name: 'jaxb-api', version: '2.3.0'
compile group: 'com.sun.xml.bind', name: 'jaxb-core', version: '2.3.0'
compile group: 'com.sun.xml.bind', name: 'jaxb-impl', version: '2.3.0'
compile group: 'javax.activation', name: 'activation', version: '1.1.1'
compile group: 'org.glassfish.jaxb', name: 'jaxb-runtime', version: '2.3.1'
Run Code Online (Sandbox Code Playgroud)

但我仍然遇到同样的错误:

javax/xml/bind/JAXBException
> javax.xml.bind.JAXBException

org.gradle.api.tasks.TaskExecutionException
: 
Execution failed for task ':app:compileDesarrolloDebugJavaWithJavac'.
Open stacktrace
Caused by: 
java.lang.NoClassDefFoundError
: 
javax/xml/bind/JAXBException
Open stacktrace
Caused by: 
java.lang.ClassNotFoundException
: 
javax.xml.bind.JAXBException
Close stacktrace
at org.gradle.api.internal.tasks.compile.AnnotationProcessingCompileTask.instantiateProcessor(AnnotationProcessingCompileTask.java:149)
at org.gradle.api.internal.tasks.compile.AnnotationProcessingCompileTask.setupProcessors(AnnotationProcessingCompileTask.java:108)
at org.gradle.api.internal.tasks.compile.AnnotationProcessingCompileTask.call(AnnotationProcessingCompileTask.java:91)
at org.gradle.api.internal.tasks.compile.ResourceCleaningCompilationTask.call(ResourceCleaningCompilationTask.java:57)
at org.gradle.api.internal.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:50)
at org.gradle.api.internal.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:36)
at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.delegateAndHandleErrors(NormalizingJavaCompiler.java:100)
at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:52)
at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:38)
at org.gradle.api.internal.tasks.compile.AnnotationProcessorDiscoveringCompiler.execute(AnnotationProcessorDiscoveringCompiler.java:51)
at org.gradle.api.internal.tasks.compile.AnnotationProcessorDiscoveringCompiler.execute(AnnotationProcessorDiscoveringCompiler.java:37)
...
Run Code Online (Sandbox Code Playgroud)

完整的app/build.gradle:https://gist.github.com/vivoconunxino/a68d2011bc1b184a83786a6268533087

完整错误:https://gist.github.com/vivoconunxino/1a27586133b34adbbe8314395e6704a1

cod*_*eDr 11

我也发现了这个问题。

我将以下内容添加到我的 gradle 依赖项中:

dependencies {
    [...]
    implementation 'jakarta.xml.bind:jakarta.xml.bind-api:2.3.3'
    implementation 'org.glassfish.jaxb:jaxb-runtime:2.3.3'

    annotationProcessor 'jakarta.xml.bind:jakarta.xml.bind-api:2.3.3'
    annotationProcessor 'org.glassfish.jaxb:jaxb-runtime:2.3.3'
    annotationProcessor 'javax.annotation:javax.annotation-api:1.3.2'
}
Run Code Online (Sandbox Code Playgroud)


小智 2

注意:我只是想发表评论,但没有足够的声誉来发表评论。

我今天刚刚遇到这个问题,当时尝试在 macOS 10.15.3 (Catalina) 上使用 Gradle 6.1.1(也在 5.4.1 上尝试过)并使用 JDK 11 构建 Android 应用程序。

我通过将 JDK 降级到 JDK8 解决了这个问题,因为根据此(How toresolve java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException in Java 9),显然 JAXB 在 JDK 11 中已被删除。

我觉得这是一个与 Gradle 插件(可能是 com.android.application 或 kotlin 插件)相关的问题,因为我使用 JDK11 通过 Gradle 构建了 JNI。

  • 这不是我期望的答案,但最终我无法用其他方式解决它。我还不得不降级 JDK。奇怪的是,应该可以添加一些依赖项。目前这是唯一的答案,希望积分可以为您下次评论提供帮助! (2认同)