JDK 23 |
---|
23 b26Fixed |
Relates :
|
|
Relates :
|
|
Relates :
|
|
Relates :
|
ADDITIONAL SYSTEM INFORMATION : Windows Oracle JDK22 A DESCRIPTION OF THE PROBLEM : JDK22 does not have the same built-in default stack trace handling for running a main method of a class which cannot be loaded because a dependency is missing. The same issue occurs if classes are in different jars (such as missing a jar for logger implementation) REGRESSION : Last worked in version 21 STEPS TO FOLLOW TO REPRODUCE THE PROBLEM : Compile the Demo.java class below with JDK17 and test it works JDK17 and JDK22 jdk-17\bin\javac -d classes Demo.java jdk-17\bin\java -cp classes Demo jdk-22\bin\java -cp classes Demo Then delete the referenced class and re-run: del classes\Demo$SomeDependency.class jdk-17\bin\java -cp classes Demo jdk-22\bin\java -cp classes Demo EXPECTED VERSUS ACTUAL BEHAVIOR : EXPECTED - Run in JDK17...JDK21 reports ClassNotFoundException as expected jdk-17\bin\java -cp classes Demo Exception in thread "main" java.lang.NoClassDefFoundError: Demo$SomeDependency at Demo.<clinit>(Demo.java:10) Caused by: java.lang.ClassNotFoundException: Demo$SomeDependency at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) ACTUAL - Re-run in JDK22 prints nothing: \java\jdk-22\bin\java -cp classes Demo ---------- BEGIN SOURCE ---------- // Save as Demo.java. public class Demo { static class SomeDependency {} private static final SomeDependency X = new SomeDependency(); public static void main(String... args) { System.out.println("X="+X); } } ---------- END SOURCE ---------- CUSTOMER SUBMITTED WORKAROUND : None. FREQUENCY : always
|