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

中改成java (JDK) 1.8

注意低于 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的主要内容,如果未能解决你的问题,请参考以下文章