java - 使用 gradle 构建 javax/xml/bind/JAXBException
问题描述
我正在尝试更新到 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
解决方案
注意:我只是想发表评论,但没有足够的声誉发表评论。
我今天刚遇到这个问题,尝试使用 Gradle 6.1.1(也在 5.4.1 上尝试过)构建 Android 应用程序,并在 macOS 10.15.3(Catalina)上使用 JDK 11。
我通过将我的 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。
推荐阅读
- html - 为什么当父 div 的大小小于 14px 时 svg 对齐方式会发生变化?
- oracle - 如何将单个操作(循环所有记录)转换为 oracle
- mysql - MYSQL:如何将公用表表达式选择到临时表中
- javascript - 在同一浏览器中跨域数据共享
- java - 制作最终的 Android Studio
- react-native - 如何在 React Native 应用程序中实现共享功能?
- java - Java中二维矩形打包的简单实现
- java - 为什么我的程序没有通过 Java 检查 MySQL 中除第一个之外的行中的数据?
- c++ - c++中的简单矩阵求幂
- c - 将两个无符号的减法存储到有符号的语义