Tengo un proyecto de Android donde ya no puedo ejecutar todas las tareas de prueba de gradle localmente (tengo 3 sabores diferentes en este proyecto). Tengo este mensaje de error 50 veces antes de que las tareas fallen. No tengo problemas para ejecutar estas tareas de forma remota con Gitlab CI/CD, y tengo otro proyecto local donde tampoco tengo este problema.
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:2150)
at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1668)
at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:482)
at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:440)
at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.deserializeWorker(SystemApplicationClassLoaderWorker.java:153)
at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121)
at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71)
at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)
tungken
Este es un problema antiguo, pero para los futuros buscadores de Google y quizás para las partes interesadas que puedan solucionarlo, vale la pena mencionar que si está utilizando uno de los tutoriales más populares para configurar JaCoCo + Robolectric + Espresso: https://medium.com/@rafael_toledo/estableciendo-un-informe-de-cobertura-unificada-en-android-con-jacoco-robolectric-y-espresso-ffe239aaf3fa . Por favor agregue debajo de esto:
tasks.withType(Test) {
jacoco.includeNoLocationClasses = true
jacoco.excludes = ['jdk.internal.*']
}
En mi caso:
junitJacoco {
jacocoVersion = '0.8.4' // type String
includeInstrumentationCoverageInMergedReport = true // type boolean
tasks.withType(Test) {
jacoco.includeNoLocationClasses = true
jacoco.excludes = ['jdk.internal.*']
}
}
-
gracias me funciono Además, el enlace que ha mencionado no es accesible.
–Vishal Naikawadi
29 de julio de 2021 a las 11:21
-
Pasé tanto tiempo tratando de arreglar esto y mi problema fue que olvidé el
*
comodín al final dejdk.internal.*
🤦♂️– Dhananjay Suresh
9 de agosto de 2021 a las 21:13
-
¡Gracias! Agregando jacoco.excluye = [‘jdk.internal.*’] ¡Hizo el truco!
– Ser
26 de agosto de 2021 a las 13:39
Gracias a @Tungken
Tuve que agregarlo dentro testOptions { unitTests.all { jacoco {
android {
compileSdk 30
buildToolsVersion "30.0.3"
defaultConfig {
...
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
debug {
testCoverageEnabled true
debuggable true
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
}
kotlinOptions {
jvmTarget="11"
}
testOptions {
unitTests.all {
jacoco {
includeNoLocationClasses = true
excludes = ['jdk.internal.*'] //This line
}
}
unitTests.returnDefaultValues = true
}
}
-
Gracias. Para mí, solo funcionó cuando lo agregué dentro: testOptions { unitTests.all { jacoco {
– Arpit Ratán
13 oct 2021 a las 9:55
-
Esta solución funcionó para mí, pero nadie más en mi equipo necesitaba agregarla; todos podían ejecutar las pruebas sin problemas, y las pruebas también funcionan bien en Jenkins. Por lo tanto, no quiero enviar este cambio a mi repositorio. ¿Alguien sabe por qué solo necesito hacer este cambio? Debe haber algo que pueda cambiar localmente, así que no necesito hacer esto.
– elíptica1
30 de diciembre de 2021 a las 16:23
-
@ elliptic1 Tengo exactamente el mismo problema. ¿Has encontrado una solución?
– eimmer
8 de marzo de 2022 a las 14:47
-
@ elliptic1 Asegúrese de que la versión de Java en su ruta coincida con sus compañeros de trabajo (ese fue mi problema).
– Kevin Brocke
31/03/2022 a las 20:01
nikita baronia
En tal caso, incluso si su JAVA_HOME está configurado en bash_profile, también debe configurarlo en Android, para hacerlo: Vaya a Archivo -> Estructura del proyecto -> Ubicación SDK establecer ubicación JDK.
A veces, puede ser una ubicación diferente a la de bash_profile.
-
¡Esto funcionó para mí! Cambié mi JDK de 11 a 8 y ahora puedo ejecutar las pruebas localmente. ¡Gracias!
– Joaquín Iurchuk
22 de marzo de 2022 a las 23:03
Para cualquiera que busque cómo se ve la solución en Kotlin *.kts
:
tasks.withType<Test> {
extensions.configure(JacocoTaskExtension::class) {
isIncludeNoLocationClasses = true
excludes = listOf("jdk.internal.*")
}
}
Para cualquiera que busque cómo se ve la solución para Kotlin DSL: solución funcional:
import com.android.build.gradle.BaseExtension
import org.gradle.kotlin.dsl.configure
import org.gradle.testing.jacoco.plugins.JacocoTaskExtension
configure<BaseExtension> {
testOptions {
unitTests {
all { test ->
test.extensions.configure<JacocoTaskExtension> {
excludes = listOf("jdk.internal.*")
}
}
}
}
}
Estoy teniendo exactamente el mismo problema, ¿ha actualizado recientemente a las últimas versiones de Jetbrains IDE por casualidad? como 4.2.1 creo
– davy307
21 de junio de 2021 a las 16:24
@ davy307 Sí, recientemente también actualicé Android Studio a 4.2.1 pero no puedo fechar el problema, así que no estoy seguro si esto está relacionado
– Alan
22 de junio de 2021 a las 12:42
Actualización: tengo el problema en AS 4.2.1. Luego probé con la última versión de IC 2021.1, al principio intellij tenía problemas con gradle y no quería compilar el proyecto. Después de revisar el historial de git de mi proyecto, de alguna manera solucionó el problema de compilación con IC (sin cambiar una línea) y ahora puedo compilar el proyecto y ejecutar las pruebas con IC. El problema sigue siendo con AS.
– Alan
22 de junio de 2021 a las 16:26
bien, luego de investigar un poco, resulta que AS 4.2.1 tiene un problema en el que pierde la referencia al JDK, ahora, dependiendo de su proyecto, necesita descargar la versión específica de JDK de Oracle (para el nuestro usé JDK 8 (oracle.com/uk/java/technologies/javase/…) ya que ese es el máximo admitido, luego apunte AS a eso como su JAVA_HOME en el menú Estructura del proyecto
– davy307
23 de junio de 2021 a las 13:08