简体   繁体   English

将 android studio 更新到 ArticFox 后运行单元测试时出现 NoClassDefFoundError | 2020.3.1

[英]NoClassDefFoundError on running unit test after updating android studio to ArticFox | 2020.3.1

Test Events were not Received Error:未收到测试事件错误:

NoClassDefFoundError on running unit test after updating android studio to ArticFox |将 android studio 更新到 ArticFox 后运行单元测试时出现 NoClassDefFoundError | 2020.3.1. 2020.3.1。

Below is the full error.以下是完整的错误。

java.lang.NoClassDefFoundError: jdk/internal/reflect/GeneratedSerializationConstructorAccessor1
at jdk.internal.reflect.GeneratedSerializationConstructorAccessor1.newInstance(Unknown Source)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
at java.base/java.io.ObjectStreamClass.newInstance(ObjectStreamClass.java:1092)
at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2180)
at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1679)
at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:493)
at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:451)
at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:122)
at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:69)
at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:68)
at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:73)

Caused by: java.lang.ClassNotFoundException: jdk.internal.reflect.GeneratedSerializationConstructorAccessor1
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:471)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:589)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
... 11 more

I have just downloaded the latest android studio, clone a project and trying to run unit tests.我刚刚下载了最新的 android studio,克隆了一个项目并尝试运行单元测试。

Please help on how to fix this.请帮助解决此问题。 I am using embedded JDK (which is Java 11.0)我正在使用嵌入式 JDK(即 Java 11.0)

It was happening due to the jacoco.这是由于jacoco而发生的。 Latest android studio comes with Java 11 but we were using Java 9. Making below changes fixed it.最新的 android studio 带有 Java 11,但我们使用的是 Java 9。进行以下更改修复了它。

jacoco { includeNoLocationClasses = true }

to

jacoco {
   includeNoLocationClasses = true
   excludes = ['jdk.internal.*'] 
}

Android Studio now using JDK 11. So, if you are using a lower version of JDK and JaCoCo, it can be a solution: Android Studio 现在使用 JDK 11。因此,如果您使用的是较低版本的 JDK 和 JaCoCo,它可以是一个解决方案:

You need to add the following line to the JaCoCo block(s) in your build.gradle file:您需要将以下行添加到build.gradle文件中的 JaCoCo 块中:

excludes = ['jdk.internal.*']

So, the final blocks look likes this:所以,最终的块看起来像这样:

jacoco {
    includeNoLocationClasses = true
    excludes = ['jdk.internal.*']
}

You can find the reason in release note :您可以在发行说明中找到原因:

When running in Android Studio, the Gradle build tool uses Studio's bundled JDK.在 Android Studio 中运行时,Gradle 构建工具使用 Studio 捆绑的 JDK。 In previous releases, JDK 8 was bundled with Studio.在以前的版本中,JDK 8 与 Studio 捆绑在一起。 In 4.2, however, JDK 11 is now bundled instead.但是,在 4.2 中,现在捆绑了 JDK 11。 When using the new bundled JDK to run Gradle, this may result in some incompatibility or impact JVM performance due to changes to the garbage collector.在使用新捆绑的 JDK 运行 Gradle 时,这可能会由于垃圾收集器的更改而导致一些不兼容或影响 JVM 性能。 These issues are described in the AGP release notes. AGP 发行说明中描述了这些问题。

For anyone looking how it is done in Kotlin:对于任何想在 Kotlin 中完成它的人:

tasks.withType<Test> {
    extensions.configure(JacocoTaskExtension::class) {
        isIncludeNoLocationClasses = true
        excludes = listOf("jdk.internal.*")
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 在 M1 Apple Silicon 上更新 Android studio Arctic Fox(2020.3.1) 后,无法找到与 flutter 医生捆绑的 Java 版本 - Unable to find bundled Java version with flutter doctor, after updating Android studio Arctic Fox(2020.3.1) on M1 Apple Silicon 使用 Gradle 任务运行单元测试时出现 NoClassDefFoundError - NoClassDefFoundError when running unit test with Gradle task Android Studio运行单元测试显示&#39;空测试套件&#39; - Android Studio running unit test shows 'Empty test suite' 运行机器人单元测试时出现 NoClassDefFoundError - NoClassDefFoundError while running Roboelectric Unit Test 如何使用Android Studio 1.1上的新测试支持解决单元测试中的NoClassDefFoundError - How solve NoClassDefFoundError on unit test using new test support on Android Studio 1.1 运行Android单元测试以使用ActivityInstrumentationTestCase2测试FragmentActivity时发生java.lang.NoClassDefFoundError - java.lang.NoClassDefFoundError when running android unit test to test FragmentActivity with ActivityInstrumentationTestCase2 Android 单元测试在日志上抛出 NoClassDefFoundError - Android Unit Test throws NoClassDefFoundError on Log 通过 Android Studio 运行单元测试第一次工作然后失败 - Running unit test via Android Studio works first time then fails Android Studio Canary 2020.3.1:Kotlin 未解决的参考文献 - Android Studio Canary 2020.3.1: Kotlin Unresolved References java.lang.NoClassDefFoundError:将android studio更新到3.2后的com / android / ide / common / res2 / ResourceSet - java.lang.NoClassDefFoundError: com/android/ide/common/res2/ResourceSet after updating android studio to 3.2
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM