I have a simple Java command line application using JUnit 6.0.3 with a classic and native Gradle build.
Since JUnit 6.1.0 './gradlew nativeTest' fails with the following error:
Exception in thread "main" com.oracle.svm.core.jdk.UnsupportedFeatureError: SerializationConstructorAccessor class not found for declaringClass: org.junit.platform.engine.UniqueId$SerializedForm (targetConstructorClass: java.lang.Object). Usually adding org.junit.platform.engine.UniqueId$SerializedForm to serialization-config.json fixes the problem.
> Task :nativeTest FAILED
at org.graalvm.nativeimage.builder/com.oracle.svm.core.util.VMError.unsupportedFeature(VMError.java:121)
gradle/actions: Writing build results to /home/runner/work/_temp/.gradle-actions/build-results/__run-1784609309065.json
at org.graalvm.nativeimage.builder/com.oracle.svm.core.reflect.serialize.SerializationSupport.getSerializationConstructorAccessor(SerializationSupport.java:286)
at java.base@25.0.3/jdk.internal.reflect.ReflectionFactory.generateConstructor(ReflectionFactory.java:2439)
[Incubating] Problems report is available at: file:///home/runner/work/junit-native-build-failure/junit-native-build-failure/build/reports/problems/problems-report.html
at java.base@25.0.3/jdk.internal.reflect.ReflectionFactory.newConstructorForSerialization(ReflectionFactory.java:297)
at java.base@25.0.3/java.io.ObjectStreamClass.getSerializableConstructor(ObjectStreamClass.java:1319)
at java.base@25.0.3/java.io.ObjectStreamClass.<init>(ObjectStreamClass.java:371)
at java.base@25.0.3/java.io.ObjectStreamClass$Caches$1.computeValue(ObjectStreamClass.java:93)
at java.base@25.0.3/java.io.ObjectStreamClass$Caches$1.computeValue(ObjectStreamClass.java:90)
at java.base@25.0.3/java.io.ClassCache$1.computeValue(ClassCache.java:78)
at java.base@25.0.3/java.io.ClassCache$1.computeValue(ClassCache.java:75)
at java.base@25.0.3/java.lang.ClassValue.get(JavaLangSubstitutions.java:542)
at java.base@25.0.3/java.io.ClassCache.get(ClassCache.java:89)
at java.base@25.0.3/java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:76)
at java.base@25.0.3/java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:227)
at org.junit.platform.engine.UniqueId.<clinit>(UniqueId.java:51)
at org.junit.platform.engine.discovery.DiscoverySelectors.selectUniqueId(DiscoverySelectors.java:[119](https://github.com/grumpyf0x48/junit-native-build-failure/actions/runs/29802216161/job/88545343306#step:5:120)9)
at java.base@25.0.3/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:214)
at java.base@25.0.3/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1716)
at java.base@25.0.3/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:803)
at java.base@25.0.3/java.util.stream.ReferencePipeline$7$1FlatMap.accept(ReferencePipeline.java:293)
at java.base@25.0.3/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:214)
at java.base@25.0.3/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:197)
at java.base@25.0.3/java.util.Iterator.forEachRemaining(Iterator.java:133)
at java.base@25.0.3/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1939)
at java.base@25.0.3/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570)
at java.base@25.0.3/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560)
at java.base@25.0.3/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
at java.base@25.0.3/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265)
at java.base@25.0.3/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:723)
at org.graalvm.junit.platform.NativeImageJUnitLauncher.getSelectors(NativeImageJUnitLauncher.java:169)
at org.graalvm.junit.platform.NativeImageJUnitLauncher.getTestPlan(NativeImageJUnitLauncher.java:148)
at org.graalvm.junit.platform.NativeImageJUnitLauncher.main(NativeImageJUnitLauncher.java:[122](https://github.com/grumpyf0x48/junit-native-build-failure/actions/runs/29802216161/job/88545343306#step:5:123))
at java.base@25.0.3/java.lang.invoke.LambdaForm$DMH/sa346b79c.invokeStaticInit(LambdaForm$DMH)
FAILURE: Build failed with an exception.
Steps to reproduce
Sample Project shows the build error :
- Main branch using JUnit 6.0.3 has GREEN build
- Pull Request has RED build
Context
- Used versions (Jupiter/Vintage/Platform): 6.1.0
- Java Version: 25
- Build Tool/IDE: Gradle
Workaround
To make the build GREEN, it is possible to add the following content to src/test/resources/META-INF/native-image/serialization-config.json :
[
{
"name": "org.junit.platform.engine.UniqueId$SerializedForm"
}
]
I have a simple Java command line application using JUnit 6.0.3 with a classic and native Gradle build.
Since JUnit 6.1.0 './gradlew nativeTest' fails with the following error:
Steps to reproduce
Sample Project shows the build error :
Context
Workaround
To make the build GREEN, it is possible to add the following content to
src/test/resources/META-INF/native-image/serialization-config.json: