Hello, first of all thanks for the great library. Its really a pleasure using it.
This seemed wrong because clearly many classes were loaded with the system classloader. I checked and made sure, and in fact all of the classes I was looking for were loaded from it.
It seems like there have been issues with the system classloader, and that these issues have been addressed but only for when ignoreParentClassLoaders is false. However, I think many new users such as myself might intuitively use ignoreParentClassLoaders with the System classloader in an attempt to avoid using the platform classloader.
So there is a perfectly fine workaround, but I think something might be inconsistent here in the library. I think if we configure ClassGraph to use only the system classoader but to "ignore parent classloaders", I think we would expect it to get just that- all the classed loaded by the System classloader without the platform classes loaded with the platform loader.
Using classgraph version 4.8.162.
One thing I think that really clarifies this issue to me is that in the log, this statement is inconsistent:
So the log says that it notices we used the System classloader and did an automatic fix for it. (I think the log has a typo, it says java.lang.path but I think it meant java.class.path?) But the according to the source code, I should expect to see the line Getting classpath entries from java.class.path in my logs, but I never do.
Sep 23, 2023 10:03:45 PM nonapi.io.github.classgraph.utils.LogNode flush
INFO: 2023-09-23T22:03:45.513-0400 ClassGraph ClassGraph version 4.8.162
2023-09-23T22:03:45.513-0400 ClassGraph Operating system: Mac OS X 13.5.2 aarch64
2023-09-23T22:03:45.513-0400 ClassGraph Java version: 17.0.6 / 17.0.6+10-LTS (Azul Systems, Inc.)
2023-09-23T22:03:45.513-0400 ClassGraph Java home: /Users/matthewgroth/Library/Java/JavaVirtualMachines/azul-17.0.6/Contents/Home
2023-09-23T22:03:45.517-0400 ClassGraph ScanSpec:
2023-09-23T22:03:45.517-0400 ClassGraph -- packageAcceptReject:
2023-09-23T22:03:45.517-0400 ClassGraph -- packagePrefixAcceptReject:
2023-09-23T22:03:45.517-0400 ClassGraph -- pathAcceptReject:
2023-09-23T22:03:45.517-0400 ClassGraph -- pathPrefixAcceptReject:
2023-09-23T22:03:45.517-0400 ClassGraph -- classAcceptReject:
2023-09-23T22:03:45.517-0400 ClassGraph -- classfilePathAcceptReject:
2023-09-23T22:03:45.517-0400 ClassGraph -- classPackageAcceptReject:
2023-09-23T22:03:45.517-0400 ClassGraph -- classPackagePathAcceptReject:
2023-09-23T22:03:45.517-0400 ClassGraph -- moduleAcceptReject:
2023-09-23T22:03:45.517-0400 ClassGraph -- jarAcceptReject:
2023-09-23T22:03:45.517-0400 ClassGraph -- classpathElementResourcePathAcceptReject:
2023-09-23T22:03:45.517-0400 ClassGraph -- libOrExtJarAcceptReject:
2023-09-23T22:03:45.517-0400 ClassGraph -- scanJars: true
2023-09-23T22:03:45.517-0400 ClassGraph -- scanNestedJars: true
2023-09-23T22:03:45.517-0400 ClassGraph -- scanDirs: true
2023-09-23T22:03:45.517-0400 ClassGraph -- scanModules: false
2023-09-23T22:03:45.517-0400 ClassGraph -- enableClassInfo: true
2023-09-23T22:03:45.517-0400 ClassGraph -- enableFieldInfo: false
2023-09-23T22:03:45.517-0400 ClassGraph -- enableMethodInfo: false
2023-09-23T22:03:45.517-0400 ClassGraph -- enableAnnotationInfo: false
2023-09-23T22:03:45.517-0400 ClassGraph -- enableStaticFinalFieldConstantInitializerValues: false
2023-09-23T22:03:45.517-0400 ClassGraph -- enableInterClassDependencies: false
2023-09-23T22:03:45.517-0400 ClassGraph -- enableExternalClasses: false
2023-09-23T22:03:45.517-0400 ClassGraph -- enableSystemJarsAndModules: false
2023-09-23T22:03:45.517-0400 ClassGraph -- ignoreClassVisibility: true
2023-09-23T22:03:45.517-0400 ClassGraph -- ignoreFieldVisibility: false
2023-09-23T22:03:45.517-0400 ClassGraph -- ignoreMethodVisibility: false
2023-09-23T22:03:45.517-0400 ClassGraph -- disableRuntimeInvisibleAnnotations: false
2023-09-23T22:03:45.517-0400 ClassGraph -- extendScanningUpwardsToExternalClasses: true
2023-09-23T22:03:45.517-0400 ClassGraph -- allowedURLSchemes: null
2023-09-23T22:03:45.517-0400 ClassGraph -- addedClassLoaders: null
2023-09-23T22:03:45.517-0400 ClassGraph -- overrideClassLoaders: [jdk.internal.loader.ClassLoaders$AppClassLoader@531d72ca]
2023-09-23T22:03:45.517-0400 ClassGraph -- addedModuleLayers: null
2023-09-23T22:03:45.518-0400 ClassGraph -- overrideModuleLayers: null
2023-09-23T22:03:45.518-0400 ClassGraph -- overrideClasspath: null
2023-09-23T22:03:45.518-0400 ClassGraph -- classpathElementFilters: null
2023-09-23T22:03:45.518-0400 ClassGraph -- initializeLoadedClasses: false
2023-09-23T22:03:45.518-0400 ClassGraph -- removeTemporaryFilesAfterScan: false
2023-09-23T22:03:45.518-0400 ClassGraph -- ignoreParentClassLoaders: true
2023-09-23T22:03:45.518-0400 ClassGraph -- ignoreParentModuleLayers: false
2023-09-23T22:03:45.518-0400 ClassGraph -- modulePathInfo:
2023-09-23T22:03:45.518-0400 ClassGraph -- maxBufferedJarRAMSize: 67108864
2023-09-23T22:03:45.518-0400 ClassGraph -- enableMemoryMapping: true
2023-09-23T22:03:45.518-0400 ClassGraph -- enableMultiReleaseVersions: false
2023-09-23T22:03:45.518-0400 ClassGraph Number of worker threads: 17
2023-09-23T22:03:45.520-0400 ClassGraph Finding classpath
2023-09-23T22:03:45.520-0400 ClassGraph -- Finding classpath and modules
2023-09-23T22:03:45.520-0400 ClassGraph ---- overrideClassLoaders() was called with an instance of jdk.internal.loader.ClassLoaders$AppClassLoader, which is a system classloader, so enableSystemJarsAndModules() was called automatically
2023-09-23T22:03:45.520-0400 ClassGraph ---- overrideClassLoaders() was called with an instance of jdk.internal.loader.ClassLoaders$AppClassLoader, which is a system classloader, so the `java.lang.path` classpath will also be scanned
2023-09-23T22:03:45.530-0400 ClassGraph ---- System modules found:
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module java.base, location=jrt:/java.base]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module java.compiler, location=jrt:/java.compiler]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module java.datatransfer, location=jrt:/java.datatransfer]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module java.desktop, location=jrt:/java.desktop]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module java.instrument, location=jrt:/java.instrument]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module java.logging, location=jrt:/java.logging]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module java.management, location=jrt:/java.management]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module java.management.rmi, location=jrt:/java.management.rmi]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module java.naming, location=jrt:/java.naming]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module java.net.http, location=jrt:/java.net.http]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module java.prefs, location=jrt:/java.prefs]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module java.rmi, location=jrt:/java.rmi]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module java.scripting, location=jrt:/java.scripting]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module java.security.jgss, location=jrt:/java.security.jgss]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module java.security.sasl, location=jrt:/java.security.sasl]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module java.smartcardio, location=jrt:/java.smartcardio]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module java.sql, location=jrt:/java.sql]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module java.sql.rowset, location=jrt:/java.sql.rowset]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module java.transaction.xa, location=jrt:/java.transaction.xa]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module java.xml, location=jrt:/java.xml]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module java.xml.crypto, location=jrt:/java.xml.crypto]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module jdk.accessibility, location=jrt:/jdk.accessibility]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module jdk.attach, location=jrt:/jdk.attach]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module jdk.charsets, location=jrt:/jdk.charsets]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module jdk.compiler, location=jrt:/jdk.compiler]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module jdk.crypto.cryptoki, location=jrt:/jdk.crypto.cryptoki]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module jdk.crypto.ec, location=jrt:/jdk.crypto.ec]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module jdk.dynalink, location=jrt:/jdk.dynalink]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module jdk.editpad, location=jrt:/jdk.editpad]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module jdk.httpserver, location=jrt:/jdk.httpserver]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module jdk.internal.ed, location=jrt:/jdk.internal.ed]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module jdk.internal.jvmstat, location=jrt:/jdk.internal.jvmstat]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module jdk.internal.le, location=jrt:/jdk.internal.le]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module jdk.internal.opt, location=jrt:/jdk.internal.opt]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module jdk.jartool, location=jrt:/jdk.jartool]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module jdk.javadoc, location=jrt:/jdk.javadoc]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module jdk.jconsole, location=jrt:/jdk.jconsole]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module jdk.jdeps, location=jrt:/jdk.jdeps]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module jdk.jdi, location=jrt:/jdk.jdi]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module jdk.jdwp.agent, location=jrt:/jdk.jdwp.agent]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module jdk.jfr, location=jrt:/jdk.jfr]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module jdk.jlink, location=jrt:/jdk.jlink]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module jdk.jpackage, location=jrt:/jdk.jpackage]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module jdk.jshell, location=jrt:/jdk.jshell]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module jdk.jsobject, location=jrt:/jdk.jsobject]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module jdk.jstatd, location=jrt:/jdk.jstatd]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module jdk.localedata, location=jrt:/jdk.localedata]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module jdk.management, location=jrt:/jdk.management]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module jdk.management.agent, location=jrt:/jdk.management.agent]
2023-09-23T22:03:45.530-0400 ClassGraph ------ [module jdk.management.jfr, location=jrt:/jdk.management.jfr]
2023-09-23T22:03:45.531-0400 ClassGraph ------ [module jdk.naming.dns, location=jrt:/jdk.naming.dns]
2023-09-23T22:03:45.531-0400 ClassGraph ------ [module jdk.naming.rmi, location=jrt:/jdk.naming.rmi]
2023-09-23T22:03:45.531-0400 ClassGraph ------ [module jdk.net, location=jrt:/jdk.net]
2023-09-23T22:03:45.531-0400 ClassGraph ------ [module jdk.nio.mapmode, location=jrt:/jdk.nio.mapmode]
2023-09-23T22:03:45.531-0400 ClassGraph ------ [module jdk.random, location=jrt:/jdk.random]
2023-09-23T22:03:45.531-0400 ClassGraph ------ [module jdk.sctp, location=jrt:/jdk.sctp]
2023-09-23T22:03:45.531-0400 ClassGraph ------ [module jdk.security.auth, location=jrt:/jdk.security.auth]
2023-09-23T22:03:45.531-0400 ClassGraph ------ [module jdk.security.jgss, location=jrt:/jdk.security.jgss]
2023-09-23T22:03:45.531-0400 ClassGraph ------ [module jdk.unsupported, location=jrt:/jdk.unsupported]
2023-09-23T22:03:45.531-0400 ClassGraph ------ [module jdk.unsupported.desktop, location=jrt:/jdk.unsupported.desktop]
2023-09-23T22:03:45.531-0400 ClassGraph ------ [module jdk.xml.dom, location=jrt:/jdk.xml.dom]
2023-09-23T22:03:45.531-0400 ClassGraph ------ [module jdk.zipfs, location=jrt:/jdk.zipfs]
2023-09-23T22:03:45.531-0400 ClassGraph ---- Scanning of non-system modules is not enabled
2023-09-23T22:03:45.535-0400 ClassGraph ---- System jars:
2023-09-23T22:03:45.535-0400 ClassGraph ------ Scanning disabled for lib or ext jar: /Users/matthewgroth/Library/Java/JavaVirtualMachines/azul-17.0.6/Contents/Home/lib/jrt-fs.jar
2023-09-23T22:03:45.535-0400 ClassGraph ---- ClassLoaderHandlers:
2023-09-23T22:03:45.535-0400 ClassGraph ------ nonapi.io.github.classgraph.classloaderhandler.AntClassLoaderHandler
2023-09-23T22:03:45.535-0400 ClassGraph ------ nonapi.io.github.classgraph.classloaderhandler.EquinoxClassLoaderHandler
2023-09-23T22:03:45.535-0400 ClassGraph ------ nonapi.io.github.classgraph.classloaderhandler.EquinoxContextFinderClassLoaderHandler
2023-09-23T22:03:45.535-0400 ClassGraph ------ nonapi.io.github.classgraph.classloaderhandler.FelixClassLoaderHandler
2023-09-23T22:03:45.535-0400 ClassGraph ------ nonapi.io.github.classgraph.classloaderhandler.JBossClassLoaderHandler
2023-09-23T22:03:45.535-0400 ClassGraph ------ nonapi.io.github.classgraph.classloaderhandler.WeblogicClassLoaderHandler
2023-09-23T22:03:45.535-0400 ClassGraph ------ nonapi.io.github.classgraph.classloaderhandler.WebsphereLibertyClassLoaderHandler
2023-09-23T22:03:45.535-0400 ClassGraph ------ nonapi.io.github.classgraph.classloaderhandler.WebsphereTraditionalClassLoaderHandler
2023-09-23T22:03:45.535-0400 ClassGraph ------ nonapi.io.github.classgraph.classloaderhandler.OSGiDefaultClassLoaderHandler
2023-09-23T22:03:45.535-0400 ClassGraph ------ nonapi.io.github.classgraph.classloaderhandler.SpringBootRestartClassLoaderHandler
2023-09-23T22:03:45.535-0400 ClassGraph ------ nonapi.io.github.classgraph.classloaderhandler.TomcatWebappClassLoaderBaseHandler
2023-09-23T22:03:45.535-0400 ClassGraph ------ nonapi.io.github.classgraph.classloaderhandler.CxfContainerClassLoaderHandler
2023-09-23T22:03:45.535-0400 ClassGraph ------ nonapi.io.github.classgraph.classloaderhandler.PlexusClassWorldsClassRealmClassLoaderHandler
2023-09-23T22:03:45.535-0400 ClassGraph ------ nonapi.io.github.classgraph.classloaderhandler.QuarkusClassLoaderHandler
2023-09-23T22:03:45.535-0400 ClassGraph ------ nonapi.io.github.classgraph.classloaderhandler.UnoOneJarClassLoaderHandler
2023-09-23T22:03:45.535-0400 ClassGraph ------ nonapi.io.github.classgraph.classloaderhandler.ParentLastDelegationOrderTestClassLoaderHandler
2023-09-23T22:03:45.535-0400 ClassGraph ------ nonapi.io.github.classgraph.classloaderhandler.JPMSClassLoaderHandler
2023-09-23T22:03:45.535-0400 ClassGraph ------ nonapi.io.github.classgraph.classloaderhandler.URLClassLoaderHandler
2023-09-23T22:03:45.535-0400 ClassGraph ------ nonapi.io.github.classgraph.classloaderhandler.ClassGraphClassLoaderHandler
2023-09-23T22:03:45.535-0400 ClassGraph ---- Finding unique classloaders in delegation order
2023-09-23T22:03:45.536-0400 ClassGraph ---- Obtaining URLs from classloaders in delegation order
2023-09-23T22:03:45.536-0400 ClassGraph ------ Ignoring parent classloader jdk.internal.loader.ClassLoaders$PlatformClassLoader@45f4a7c1, normally handled by nonapi.io.github.classgraph.classloaderhandler.JPMSClassLoaderHandler
2023-09-23T22:03:45.536-0400 ClassGraph ------ Classloader jdk.internal.loader.ClassLoaders$AppClassLoader is handled by nonapi.io.github.classgraph.classloaderhandler.JPMSClassLoaderHandler
2023-09-23T22:03:45.537-0400 ClassGraph -- Skipping module, since module scanning is disabled: java.base
2023-09-23T22:03:45.537-0400 ClassGraph -- Skipping module, since module scanning is disabled: java.compiler
2023-09-23T22:03:45.537-0400 ClassGraph -- Skipping module, since module scanning is disabled: java.datatransfer
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: java.desktop
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: java.instrument
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: java.logging
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: java.management
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: java.management.rmi
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: java.naming
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: java.net.http
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: java.prefs
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: java.rmi
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: java.scripting
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: java.security.jgss
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: java.security.sasl
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: java.smartcardio
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: java.sql
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: java.sql.rowset
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: java.transaction.xa
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: java.xml
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: java.xml.crypto
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: jdk.accessibility
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: jdk.attach
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: jdk.charsets
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: jdk.compiler
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: jdk.crypto.cryptoki
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: jdk.crypto.ec
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: jdk.dynalink
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: jdk.editpad
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: jdk.httpserver
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: jdk.internal.ed
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: jdk.internal.jvmstat
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: jdk.internal.le
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: jdk.internal.opt
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: jdk.jartool
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: jdk.javadoc
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: jdk.jconsole
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: jdk.jdeps
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: jdk.jdi
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: jdk.jdwp.agent
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: jdk.jfr
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: jdk.jlink
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: jdk.jpackage
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: jdk.jshell
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: jdk.jsobject
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: jdk.jstatd
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: jdk.localedata
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: jdk.management
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: jdk.management.agent
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: jdk.management.jfr
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: jdk.naming.dns
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: jdk.naming.rmi
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: jdk.net
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: jdk.nio.mapmode
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: jdk.random
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: jdk.sctp
2023-09-23T22:03:45.538-0400 ClassGraph -- Skipping module, since module scanning is disabled: jdk.security.auth
2023-09-23T22:03:45.539-0400 ClassGraph -- Skipping module, since module scanning is disabled: jdk.security.jgss
2023-09-23T22:03:45.539-0400 ClassGraph -- Skipping module, since module scanning is disabled: jdk.unsupported
2023-09-23T22:03:45.539-0400 ClassGraph -- Skipping module, since module scanning is disabled: jdk.unsupported.desktop
2023-09-23T22:03:45.539-0400 ClassGraph -- Skipping module, since module scanning is disabled: jdk.xml.dom
2023-09-23T22:03:45.539-0400 ClassGraph -- Skipping module, since module scanning is disabled: jdk.zipfs
2023-09-23T22:03:45.540-0400 ClassGraph Opening classpath elements (took 0.000722 sec)
2023-09-23T22:03:45.540-0400 ClassGraph Finding nested classpath elements
2023-09-23T22:03:45.541-0400 ClassGraph Final classpath element order:
2023-09-23T22:03:45.541-0400 ClassGraph -- [module java.base, location=jrt:/java.base]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module java.compiler, location=jrt:/java.compiler]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module java.datatransfer, location=jrt:/java.datatransfer]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module java.desktop, location=jrt:/java.desktop]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module java.instrument, location=jrt:/java.instrument]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module java.logging, location=jrt:/java.logging]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module java.management, location=jrt:/java.management]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module java.management.rmi, location=jrt:/java.management.rmi]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module java.naming, location=jrt:/java.naming]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module java.net.http, location=jrt:/java.net.http]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module java.prefs, location=jrt:/java.prefs]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module java.rmi, location=jrt:/java.rmi]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module java.scripting, location=jrt:/java.scripting]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module java.security.jgss, location=jrt:/java.security.jgss]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module java.security.sasl, location=jrt:/java.security.sasl]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module java.smartcardio, location=jrt:/java.smartcardio]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module java.sql, location=jrt:/java.sql]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module java.sql.rowset, location=jrt:/java.sql.rowset]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module java.transaction.xa, location=jrt:/java.transaction.xa]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module java.xml, location=jrt:/java.xml]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module java.xml.crypto, location=jrt:/java.xml.crypto]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module jdk.accessibility, location=jrt:/jdk.accessibility]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module jdk.attach, location=jrt:/jdk.attach]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module jdk.charsets, location=jrt:/jdk.charsets]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module jdk.compiler, location=jrt:/jdk.compiler]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module jdk.crypto.cryptoki, location=jrt:/jdk.crypto.cryptoki]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module jdk.crypto.ec, location=jrt:/jdk.crypto.ec]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module jdk.dynalink, location=jrt:/jdk.dynalink]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module jdk.editpad, location=jrt:/jdk.editpad]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module jdk.httpserver, location=jrt:/jdk.httpserver]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module jdk.internal.ed, location=jrt:/jdk.internal.ed]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module jdk.internal.jvmstat, location=jrt:/jdk.internal.jvmstat]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module jdk.internal.le, location=jrt:/jdk.internal.le]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module jdk.internal.opt, location=jrt:/jdk.internal.opt]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module jdk.jartool, location=jrt:/jdk.jartool]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module jdk.javadoc, location=jrt:/jdk.javadoc]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module jdk.jconsole, location=jrt:/jdk.jconsole]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module jdk.jdeps, location=jrt:/jdk.jdeps]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module jdk.jdi, location=jrt:/jdk.jdi]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module jdk.jdwp.agent, location=jrt:/jdk.jdwp.agent]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module jdk.jfr, location=jrt:/jdk.jfr]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module jdk.jlink, location=jrt:/jdk.jlink]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module jdk.jpackage, location=jrt:/jdk.jpackage]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module jdk.jshell, location=jrt:/jdk.jshell]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module jdk.jsobject, location=jrt:/jdk.jsobject]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module jdk.jstatd, location=jrt:/jdk.jstatd]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module jdk.localedata, location=jrt:/jdk.localedata]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module jdk.management, location=jrt:/jdk.management]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module jdk.management.agent, location=jrt:/jdk.management.agent]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module jdk.management.jfr, location=jrt:/jdk.management.jfr]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module jdk.naming.dns, location=jrt:/jdk.naming.dns]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module jdk.naming.rmi, location=jrt:/jdk.naming.rmi]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module jdk.net, location=jrt:/jdk.net]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module jdk.nio.mapmode, location=jrt:/jdk.nio.mapmode]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module jdk.random, location=jrt:/jdk.random]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module jdk.sctp, location=jrt:/jdk.sctp]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module jdk.security.auth, location=jrt:/jdk.security.auth]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module jdk.security.jgss, location=jrt:/jdk.security.jgss]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module jdk.unsupported, location=jrt:/jdk.unsupported]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module jdk.unsupported.desktop, location=jrt:/jdk.unsupported.desktop]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module jdk.xml.dom, location=jrt:/jdk.xml.dom]
2023-09-23T22:03:45.541-0400 ClassGraph -- [module jdk.zipfs, location=jrt:/jdk.zipfs]
2023-09-23T22:03:45.541-0400 ClassGraph Scanning classpath elements (took 0.001355 sec)
2023-09-23T22:03:45.543-0400 ClassGraph Masking classfiles (took 0.000031 sec)
2023-09-23T22:03:45.543-0400 ClassGraph Scanning classfiles (took 0.000025 sec)
2023-09-23T22:03:45.543-0400 ClassGraph Linking related classfiles (took 0.000012 sec)
2023-09-23T22:03:45.544-0400 ClassGraph Total time: 0.003 sec
Hello, first of all thanks for the great library. Its really a pleasure using it.
I'm having an issue and have been searching this repo for answers. I found #639 and that seems to be closely related to my current issue.
I am overriding the classloaders with
jdk.internal.loader.ClassLoaders$AppClassLoader. I expcted to get all of my classes, but the the list of classes returned is empty. At this point, I felt confused and knew something was wrong.This seemed wrong because clearly many classes were loaded with the system classloader. I checked and made sure, and in fact all of the classes I was looking for were loaded from it.
Eventually, I disabled
ignoreParentClassLoaders, and then it worked as expected.This seems to be a consequence of this line:
classgraph/src/main/java/nonapi/io/github/classgraph/classpath/ClasspathFinder.java
Line 298 in 5f94ed6
It seems like there have been issues with the system classloader, and that these issues have been addressed but only for when
ignoreParentClassLoadersis false. However, I think many new users such as myself might intuitively useignoreParentClassLoaderswith the System classloader in an attempt to avoid using the platform classloader.So there is a perfectly fine workaround, but I think something might be inconsistent here in the library. I think if we configure ClassGraph to use only the system classoader but to "ignore parent classloaders", I think we would expect it to get just that- all the classed loaded by the System classloader without the platform classes loaded with the platform loader.
After finding the option
enableSystemJarsAndModules(), I realized that platform classes are not loaded by default. That makes it so I no longer need to useignoreParentClassLoaders. So my workaround of just not usingignoreParentClassLoadersis perfectly fine. but I just think maybe there should be a warning or error for users who try to do what I did otherwise our expectations would not be met leading to confusion.Using classgraph version 4.8.162.
One thing I think that really clarifies this issue to me is that in the log, this statement is inconsistent:
So the log says that it notices we used the System classloader and did an automatic fix for it. (I think the log has a typo, it says
java.lang.pathbut I think it meantjava.class.path?) But the according to the source code, I should expect to see the lineGetting classpath entries from java.class.pathin my logs, but I never do.