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

5

我正在尝试升级到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)
...

完整的app/build.gradle: https://gist.github.com/vivoconunxino/a68d2011bc1b184a83786a6268533087 完整的错误信息:https://gist.github.com/vivoconunxino/1a27586133b34adbbe8314395e6704a1

请告诉我是否需要更多相关信息,我很乐意编辑帖子。 - javier_domenech
2个回答

10

我也遇到了这个问题。

我在我的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'
}

1
最终这个答案帮助我解决了问题。但是,我不得不删除实现'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' } }以避免出现:“发现超过一个文件具有OS独立路径'META-INF / LICENSE.md'” - marko
谢谢,这个答案帮助我解决了我的问题。 - Googol Shan
请问您能展示一下您找到解决方案的方法吗? - undefined
@lrnrzg 我记不清具体细节了,可能是我在谷歌上搜索了“com.sun.xml.bind替代方案”,然后找到了答案。 - undefined
@codeDr 非常感谢你。 - undefined

2
注意:我只是想发表评论,但没有足够的声望来发表评论。
今天我遇到了这个问题,当尝试使用Gradle 6.1.1(也尝试过5.4.1)和JDK 11在macOS 10.15.3(Catalina)上构建Android应用程序时。
我通过降级我的JDK来解决这个问题,到JDK8,因为根据这个(如何解决Java 9中的java.lang.NoClassDefFoundError:javax / xml / bind / JAXBException),显然在JDK 11中删除了JAXB。
我觉得这是与Gradle插件(可能是com.android.application或kotlin插件)有关的问题,因为我使用JDK11通过Gradle构建了JNI。

2
这不是我期望的答案,但最终我无法用其他方式修复它。我还必须降级JDK。奇怪,应该可以添加一些依赖关系。目前这是唯一的答案,希望积分能为您下次评论服务! - javier_domenech

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接