When using Java 25 (Corretto 25.0.0.36.1 pre-release https://github.com/corretto/corretto-25/releases/tag/25.0.0.36.1), we see the following exception:
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "nonapi.io.github.classgraph.recycler.Recycler.acquire()" because the return value of "nonapi.io.github.classgraph.fastzipfilereader.NestedJarHandler.access$500(nonapi.io.github.classgraph.fastzipfilereader.NestedJarHandler)" is null
at nonapi.io.github.classgraph.fastzipfilereader.NestedJarHandler$7.<init>(NestedJarHandler.java:693)
at nonapi.io.github.classgraph.fastzipfilereader.NestedJarHandler.openInflaterInputStream(NestedJarHandler.java:690)
at nonapi.io.github.classgraph.fileslice.Slice.open(Slice.java:246)
at nonapi.io.github.classgraph.fileslice.Slice.open(Slice.java:154)
at nonapi.io.github.classgraph.fileslice.FileSlice.load(FileSlice.java:236)
at nonapi.io.github.classgraph.fileslice.FileSlice.read(FileSlice.java:270)
at io.github.classgraph.ClasspathElementZip$1.read(ClasspathElementZip.java:411)
at io.github.classgraph.ClassGraphClassLoader.findClass(ClassGraphClassLoader.java:270)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:593)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:534)
at java.base/java.lang.Class.forName(Class.java:513)
at io.github.classgraph.ScanResult.loadClass(ScanResult.java:1458)
at io.github.classgraph.ScanResultObject.loadClass(ScanResultObject.java:230)
at io.github.classgraph.ClassInfo.loadClass(ClassInfo.java:3201)
at io.github.classgraph.ClassInfoList.loadClasses(ClassInfoList.java:263)
at io.github.classgraph.ClassInfoList.loadClasses(ClassInfoList.java:281)
This is not the case on Java 21 or 24. This is using classgraph 4.8.181.
The calling code does the equivalent of:
new ClassGraph()
.addClassLoader(classLoader)
.enableClassInfo()
.acceptPackagesNonRecursive(packagesToScan)
.removeTemporaryFilesAfterScan()
.scan()
.getAllStandardClasses()
.filter(...)
.loadClasses();