【问题标题】:javax/xml/bind/JAXBException building with gradle使用 gradle 构建 javax/xml/bind/JAXBException
【发布时间】:2025-12-10 06:45:01
【问题描述】:

我正在尝试更新到 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

我一直在寻找一些解决方案,我发现我必须在我的 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'

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

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

完整的应用程序/build.gradle:https://gist.github.com/vivoconunxino/a68d2011bc1b184a83786a6268533087

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

【问题讨论】:

  • 如果需要更多相关信息,请告诉我,我很乐意编辑帖子

标签: java android gradle


【解决方案1】:

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

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

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

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

【讨论】:

  • 这不是我所期望的答案,但最终我无法以任何其他方式解决它。我还不得不降级 JDK。很奇怪,应该可以添加一些依赖项。暂时就这一个答案,希望下次能给大家点赞!
【解决方案2】:

我也发现了这个问题。

我将以下内容添加到我的 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'
}

【讨论】:

  • 终于找到了帮助我解决问题的答案。但是,我必须删除实现'jakarta.xml.bind:jakarta.xml.bind-api:2.3.3'以避免错误:D8:程序类型已经存在:javax.activation.MimeTypeParseException,并添加:```android { ... packagingOptions { exclude 'META-INF/NOTICE.md' exclude 'META-INF/LICENSE.md' } } ``` 避免:“发现多个文件与操作系统无关的路径 'META-INF/ LICENSE.md'"
  • 谢谢,这个答案帮助我解决了我的问题。