Tobias Gierke created SUREFIRE-2201:
---------------------------------------
Summary: JDK21: Crash when using new '_' wildcard preview feature
in test classes
Key: SUREFIRE-2201
URL: https://issues.apache.org/jira/browse/SUREFIRE-2201
Project: Maven Surefire
Issue Type: Bug
Reporter: Tobias Gierke
Attachments: image-2023-10-11-14-43-20-661.png, jdk21-surefire-test.zip
Tested with Eclipse Temurin-21+35 (build 21+35-LTS) and Maven 3.9.1 on Ubuntu
22.04.03 LTS
I've attached a reproducer project, running "mvn test" will trip the crash.
{code:java}
[ERROR] Failed to execute goal
org.apache.maven.plugins:maven-surefire-plugin:3.1.2:test (default-test) on
project jdk21-surefire-test: [ERROR] [ERROR] Please refer to
/extra/home/tobi/intellij_workspace/jdk21-surefire-test/target/surefire-reports
for the individual test results. [ERROR] Please refer to dump files (if any
exist) [date].dump, [date]-jvmRun[N].dump and [date].dumpstream. [ERROR] There
was an error in the forked process [ERROR] Illegal field name "" in class
test/MainTest [ERROR] java.lang.ClassFormatError: Illegal field name "" in
class test/MainTest [ERROR] at
java.base/java.lang.ClassLoader.defineClass1(Native Method) [ERROR] at
java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1027) [ERROR]
at
java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
[ERROR] at
java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:862)
[ERROR] at
java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:760)
[ERROR] at
java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:681)
[ERROR] at
java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:639)
[ERROR] at
java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
[ERROR] at
java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) [ERROR]
at
org.apache.maven.surefire.api.util.DefaultScanResult.loadClass(DefaultScanResult.java:115)
[ERROR] at
org.apache.maven.surefire.api.util.DefaultScanResult.applyFilter(DefaultScanResult.java:85)
[ERROR] at
org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.scanClasspath(JUnitPlatformProvider.java:142)
[ERROR] at
org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invoke(JUnitPlatformProvider.java:122)
[ERROR] at
org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:385)
[ERROR] at
org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:162)
[ERROR] at
org.apache.maven.surefire.booter.ForkedBooter.run(ForkedBooter.java:507)
[ERROR] at
org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:495) {code}
What's interesting about this bug is that my reproducer project also contains a
"Main" class that uses the '_' wildcard as well and compiling this one using
"mvn compile" and then trying to run it using "java" directly leads to the same
crash:
!image-2023-10-11-14-43-20-661.png!
BUT compiling the code manually using "javac"
{code:java}
mvn clean ; mkdir -p target/classes && javac -d target/classes --source 21
--enable-preview src/main/java/test/Main.java {code}
and then running it again with "java"
{code:java}
java --enable-preview -cp target/classes test.Main
{code}
does *NOT* crash ... so this seems to be somehow related to the way Maven uses
the Java compiler.
Please move this issue to maven-compiler-plugin if more appropriate.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)