Gradle Java 10 test task fails

1,448 views
Skip to first unread message

Sverre Moe

unread,
Jun 22, 2018, 3:16:58 PM6/22/18
to JaCoCo and EclEmma Users
I have a Java 10 modular application, building with Gradle and using JaCoCo.

Version 0.8.0 ca0me with official support for Java 9, and I am using version 0.8.1 which supports Java 10.



> Task :test FAILED
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:488)
        at java.base/java.io.ObjectStreamClass.newInstance(ObjectStreamClass.java:1081)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2062)
        at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1585)
        at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:422)
        at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:107)
        at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:64)
        at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:62)
        at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:67)
Caused by: java.lang.ClassNotFoundException: jdk.internal.reflect.GeneratedSerializationConstructorAccessor1
        at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:466)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:566)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499)
        ... 10 more
<===========--> 88% EXECUTING [24s]
> IDLE


My gradle jacoco
/* JaCoCo configuration */
jacoco
{
    toolVersion
= "0.8.1"
}

jacocoTestReport
{
    reports
{
        xml
.enabled true
        html
.enabled true
   
}
}

test
{
    useJUnitPlatform
()

    doFirst
{
        jvmArgs
= [
           
'--module-path', classpath.asPath
       
]
   
}

    jacoco
{
        append
= true
       
def jacocoExec = buildDir.name + "/jacoco/jacoco.exec"
        destinationFile
= file(jacocoExec)
        includeNoLocationClasses
= true
   
}
}


Evgeny Mandrikov

unread,
Jun 22, 2018, 4:53:45 PM6/22/18
to JaCoCo and EclEmma Users
Hi,

Please have a look at https://github.com/jacoco/jacoco/issues/16#issuecomment-351943050 , which describes that
if you use "includeNoLocationClasses = true" with JDK >= 9 , then you also need "excludeClassLoaders = [ 'jdk.internal.reflect.DelegatingClassLoader' ]"

Why do you need "includeNoLocationClasses = true" ?


P.S. why not be polite and start conversation with "hi" ?

Sverre Moe

unread,
Jun 23, 2018, 7:54:51 AM6/23/18
to JaCoCo and EclEmma Users
Hi,

I don't need "includeNoLocationClasses = true", I thinkg. It was just a copy-paste configuration I found to use JaCoCo with Gradle.
Building works fine when I remove it.

Sverre Moe

unread,
Jun 24, 2018, 1:39:12 PM6/24/18
to JaCoCo and EclEmma Users
Seems I could shape off even more of the configuration, removing redundant code.

Under jacoco/toolVersion
I guess it will always use the latest tool version. So setting this would not be necessary unless one needs to guarantee a specific version.

Under jacocoTestReport/reports
No need for html.enabled=true, as it is default.
Would be great if XML also was default, but I guess cannot accommodate everyone.

Under test/jacoco
No need for append=true, as it is default.
I could see no reason to set destinationFile. unless one really needed it to a specific file name, but I don't see why.

The only remaining JaCoCo in my build.gradle;
jacocoTestReport {
    reports
{
        xml
.enabled true
   
}
}

Reply all
Reply to author
Forward
This conversation is locked
You cannot reply and perform actions on locked conversations.
0 new messages