更新Android Studio到ArticFox | 2020.3.1后运行单元测试NoClassDefFoundEr



Test Events were not Received错误:

更新android studio到ArticFox | 2020.3.1后运行单元测试noclassdeffoundererror .

下面是完整的错误:

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

我刚刚下载了最新的android studio,克隆了一个项目并尝试运行单元测试。

我该如何解决这个问题?我使用的是嵌入式JDK (Java 11.0)。

这是由于jacoco。最新的android studio自带Java 11,但我们使用的是Java 9。

jacoco { includeNoLocationClasses = true }

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

Android Studio现在使用JDK 11。因此,如果您使用的是较低版本的JDK和JaCoCo,它可以是一个解决方案:

需要将以下行添加到构建中的JaCoCo块中。gradle文件:

excludes = ['jdk.internal.*']

那么,最后的代码块看起来是这样的:

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

你可以在发行说明中找到原因:

在Android Studio中运行时,Gradle构建工具使用Studio捆绑的JDK。在以前的版本中,JDK 8是与Studio捆绑在一起的。然而,在4.2中,JDK 11现在被捆绑在了一起。当使用新的捆绑JDK来运行Gradle时,由于对垃圾收集器的更改,这可能会导致一些不兼容或影响JVM性能。这些问题在AGP发行说明中有描述。

对于在Kotlin中如何完成的任何人来说:

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

相关内容

  • 没有找到相关文章

最新更新