[英]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.