java.lang.NoClassDefFoundError:更新到 Android Studio 4.2 后的 javax/xml/bind/JAXBException
Posted
技术标签:
【中文标题】java.lang.NoClassDefFoundError:更新到 Android Studio 4.2 后的 javax/xml/bind/JAXBException【英文标题】:java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException after updating to Android Studio 4.2 【发布时间】:2021-07-28 08:15:36 【问题描述】:Google 刚刚发布了 android Studio 4.2 稳定版。我将我的 AS 从 4.1 更新到 4.2。 现在我收到了这个错误。它在数据绑定中显示错误。
Caused by: java.util.ServiceConfigurationError: javax.annotation.processing.Processor: android.databinding.annotationprocessor.ProcessDataBinding Unable to get public no-arg constructor
at kotlin.collections.CollectionsKt___CollectionsKt.toCollection(_Collections.kt:1200)
at kotlin.collections.CollectionsKt___CollectionsKt.toMutableList(_Collections.kt:1233)
at kotlin.collections.CollectionsKt___CollectionsKt.toList(_Collections.kt:1224)
at org.jetbrains.kotlin.kapt3.base.ProcessorLoader.doLoadProcessors(ProcessorLoader.kt:80)
at org.jetbrains.kotlin.kapt3.base.ProcessorLoader.loadProcessors(ProcessorLoader.kt:45)
at org.jetbrains.kotlin.kapt3.base.Kapt.kapt(Kapt.kt:42)
... 28 more
Caused by: java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
... 34 more
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.JAXBException
... 34 more
【问题讨论】:
【参考方案1】:Android Studio 4.2.0 及更多现在随附 Java 11.0.8,默认情况下将使用它,这会在已弃用的库中出现此错误。
解决方法很简单,需要在菜单File > Project Structure > JDK Location
注意低于 4.2.0 的 Android Studio 已经自带 java 1.8
【讨论】:
我无法在菜单中设置 JDK8:“请选择有效的 JDK 11 目录” 编辑:在提供正确的 JDK 位置后,它终于被接受了。只是 Android Studio 中的另一个误导性弹出窗口。 伟大的解决方案为我工作! @adek111 我也收到此通知“请选择有效的 JDK 11 目录”【参考方案2】:通过执行以下步骤,我解决了这个问题,而没有用 JAVA 8 替换 JDK。
第 1 步:将 gradle-wrapper.properties
中的 distributionUrl
更新为 https\://services.gradle.org/distributions/gradle-6.8.3-bin.zip
第 2 步:将您的 gradle 工具类路径更新为根目录中的 'com.android.tools.build:gradle:4.2.1'
buid.gradle
【讨论】:
【参考方案3】:我有同样的问题,我已经解决了。我发现Android studio 4.2会使JDK更新到Java11,它会导致你描述的错误。
您可以删除 Java11 JDK 并替换为 Java8 (/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home)。
您也可以卸载 Android Studio,然后重新安装。
【讨论】:
我在 ubuntu 中找不到类似的路径。你能帮忙吗?【参考方案4】:如果您使用的是 Ubuntu,那么只需在菜单文件 > 项目结构 > JDK 位置中将 JDK 位置更改为 JAVA (JDK) 1.8
JDK location android studio 4.2
【讨论】:
非常感谢这个答案在我的 Ubuntu 上运行良好【参考方案5】:我以为是jdk路线,经过几个小时的搜索,这对我有用
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-all.zip
在您的 build.gradle 文件中添加和更新 kotlin_version
ext.kotlin_version = '1.4.32'
dependencies
classpath 'com.android.tools.build:gradle:4.2.1'
如果您使用 enableAapt2,请将其从 gradle.properties 文件中删除
org.gradle.jvmargs=-Xmx1536M -Dkotlin.daemon.jvm.options\="-Xmx1536M"
#android.enableAapt2=false
android.useAndroidX=true
android.enableJetifier=true
【讨论】:
【参考方案6】:如果您使用 Java 11 默认附带的 Android Studio Arctic Fox,您需要使用 java 1.8 来查找在 java 11 升级中完全删除的必要类。
Android Studio北极狐设置路径如下
首选项 > 构建执行部署 > Gradle > Gradle Sdk
选择下载 JDK 然后选择 Java 1.8.x 版本并重建项目。
【讨论】:
【参考方案7】:有两种方法可以解决这个问题
-
回滚到 Java 8
更新 gradle tools 'com.android.tools.build:gradle' like 4.2.1(我用过)
可能你会遇到“Entry name 'AndroidManifest.xml' collided”的问题,在下面添加App build.gradle
android
packagingOptions
exclude 'AndroidManifest.xml'
【讨论】:
以上是关于java.lang.NoClassDefFoundError:更新到 Android Studio 4.2 后的 javax/xml/bind/JAXBException的主要内容,如果未能解决你的问题,请参考以下文章