Class ScanSpec


  • public class ScanSpec
    extends Object
    Parses the scanning specification that was passed to the ClassGraph constructor, and finds all ClassLoaders. Also defines core MatchProcessor matching logic.
    • Field Detail

      • packagePrefixWhiteBlackList

        public WhiteBlackList.WhiteBlackListPrefix packagePrefixWhiteBlackList
        Package prefix white/blacklist, for recursive scanning (with separator '.', ending in '.').
      • pathPrefixWhiteBlackList

        public WhiteBlackList.WhiteBlackListPrefix pathPrefixWhiteBlackList
        Path prefix white/blacklist, for recursive scanning (with separator '/', ending in '/').
      • performScan

        public boolean performScan
        If true, performing a scan. If false, only fetching the classpath.
      • scanJars

        public boolean scanJars
        If true, scan jarfiles.
      • scanNestedJars

        public boolean scanNestedJars
        If true, scan nested jarfiles (jarfiles within jarfiles).
      • scanDirs

        public boolean scanDirs
        If true, scan directories.
      • scanModules

        public boolean scanModules
        If true, scan modules.
      • enableClassInfo

        public boolean enableClassInfo
        If true, scan classfile bytecodes, producing ClassInfo objects.
      • enableFieldInfo

        public boolean enableFieldInfo
        If true, enables the saving of field info during the scan. This information can be obtained using ClassInfo.getFieldInfo(). By default, field info is not scanned, for efficiency.
      • enableMethodInfo

        public boolean enableMethodInfo
        If true, enables the saving of method info during the scan. This information can be obtained using ClassInfo.getMethodInfo(). By default, method info is not scanned, for efficiency.
      • enableAnnotationInfo

        public boolean enableAnnotationInfo
        If true, enables the saving of annotation info (for class, field, method or method parameter annotations) during the scan. This information can be obtained using ClassInfo.getAnnotationInfo() etc. By default, annotation info is not scanned, for efficiency.
      • enableStaticFinalFieldConstantInitializerValues

        public boolean enableStaticFinalFieldConstantInitializerValues
        Enable the storing of constant initializer values for static final fields in ClassInfo objects.
      • enableExternalClasses

        public boolean enableExternalClasses
        If true, allow external classes (classes outside of whitelisted packages) to be returned in the ScanResult, if they are directly referred to by a whitelisted class, as a superclass, implemented interface or annotation. Disabled by default.
      • blacklistSystemJarsOrModules

        public boolean blacklistSystemJarsOrModules
        True if JRE system jarfiles (rt.jar etc.) should not be scanned. By default, these are not scanned.
      • ignoreClassVisibility

        public boolean ignoreClassVisibility
        If true, ignore class visibility. If false, classes must be public to be scanned.
      • ignoreFieldVisibility

        public boolean ignoreFieldVisibility
        If true, ignore field visibility. If false, fields must be public to be scanned.
      • ignoreMethodVisibility

        public boolean ignoreMethodVisibility
        If true, ignore method visibility. If false, methods must be public to be scanned.
      • disableRuntimeInvisibleAnnotations

        public boolean disableRuntimeInvisibleAnnotations
        If true, don't scan runtime-invisible annotations (only scan annotations with RetentionPolicy.RUNTIME).
      • extendScanningUpwardsToExternalClasses

        public boolean extendScanningUpwardsToExternalClasses
        If true, when classes have superclasses, implemented interfaces or annotations that are external classes, those classes are also scanned. (Even though this slows down scanning a bit, there is no API for disabling this currently, since disabling it can lead to problems -- see #261.)
      • addedClassLoaders

        public transient List<ClassLoader> addedClassLoaders
        If non-null, specifies manually-added classloaders that should be searched after the context classloader(s).
      • overrideClassLoaders

        public transient List<ClassLoader> overrideClassLoaders
        If non-null, this list of ClassLoaders will be searched instead of the visible/context ClassLoader(s). In particular, this causes ClassGraph to ignore the java.class.path system property.
      • addedModuleLayers

        public transient List<Object> addedModuleLayers
        If non-null, specifies manually-added ModuleLayers that should be searched after the visible ModuleLayers.
      • overrideModuleLayers

        public transient List<Object> overrideModuleLayers
        If non-null, this list of ModuleLayers will be searched instead of the visible ModuleLayers.
      • overrideClasspath

        public String overrideClasspath
        If non-null, specifies a classpath to override the default one.
      • initializeLoadedClasses

        public transient boolean initializeLoadedClasses
        If true, classes loaded with Class.forName() are initialized before passing class references to MatchProcessors. If false (the default), matched classes are loaded but not initialized before passing class references to MatchProcessors (meaning classes are instead initialized lazily on first usage of the class).
      • removeTemporaryFilesAfterScan

        public transient boolean removeTemporaryFilesAfterScan
        If true, nested jarfiles (jarfiles within jarfiles) that are extracted during scanning are removed from their temporary directory (e.g. /tmp/ClassGraph-8JX2u4w) after the scan has completed. If false, temporary files are removed by the ScanResult finalizer, or on JVM exit.
      • ignoreParentClassLoaders

        public transient boolean ignoreParentClassLoaders
        If true, do not fetch paths from parent classloaders.
      • ignoreParentModuleLayers

        public transient boolean ignoreParentModuleLayers
        If true, do not scan module layers that are the parent of other module layers.
      • stripSFXHeader

        public transient boolean stripSFXHeader
        If true, manually strip the self extracting executable header from zipfiles (i.e. anything before the magic marker "PK", e.g. a Bash script added by Spring-Boot). Slightly increases scanning time, since zipfiles have to be opened twice (once as a byte stream, to check if there is an SFX header, then once as a ZipFile, for decompression). Should only be needed in rare cases, where you are dealing with jarfiles with prepended (ZipSFX) headers, where your JVM does not already automatically skip forward to the first "PK" marker (Oracle JVM on Linux does this automatically).
    • Method Detail

      • registerClassLoaderHandler

        public void registerClassLoaderHandler​(Class<? extends ClassLoaderHandler> classLoaderHandler)
        Register an extra ClassLoaderHandler.
        Parameters:
        classLoaderHandler - The class of the ClassLoaderHandler that can handle those ClassLoaders.
      • overrideClasspath

        public void overrideClasspath​(String overrideClasspath)
        Override the automatically-detected classpath with a custom search path. You can specify multiple elements, separated by File.pathSeparatorChar. If this method is called, nothing but the provided classpath will be scanned, i.e. causes ClassLoaders to be ignored, as well as the java.class.path system property.
        Parameters:
        overrideClasspath - The classpath to scan.
      • filterClasspathElements

        public void filterClasspathElements​(ClassGraph.ClasspathElementFilter classpathElementFilter)
        Add a classpath element filter. The provided ClasspathElementFilter should return true if the path string passed to it is a path you want to scan.
        Parameters:
        classpathElementFilter - The classpath element filter to apply to all discovered classpath elements, to decide which should be scanned.
      • addClassLoader

        public void addClassLoader​(ClassLoader classLoader)
        Add a ClassLoader to the list of ClassLoaders to scan. (This only works if overrideClasspath() is not called.)
        Parameters:
        classLoader - The classloader to add.
      • overrideClassLoaders

        public void overrideClassLoaders​(ClassLoader... overrideClassLoaders)
        Completely override the list of ClassLoaders to scan. (This only works if overrideClasspath() is not called.) Causes the java.class.path system property to be ignored.
        Parameters:
        overrideClassLoaders - The classloaders to override the default context classloaders with.
      • addModuleLayer

        public void addModuleLayer​(Object moduleLayer)
        Add a ModuleLayer to the list of ModuleLayers to scan. Use this method if you define your own ModuleLayer, but the scanning code is not running within that custom ModuleLayer.

        This call is ignored if it is called before overrideModuleLayers(Object...).

        Parameters:
        moduleLayer - The additional ModuleLayer to scan. (The parameter is of type Object for backwards compatibility with JDK 7 and JDK 8, but the argument should be of type ModuleLayer.)
      • overrideModuleLayers

        public void overrideModuleLayers​(Object... overrideModuleLayers)
        Completely override (and ignore) the visible ModuleLayers, and instead scan the requested ModuleLayers.

        This call is ignored if overrideClasspath() is called.

        Parameters:
        overrideModuleLayers - The ModuleLayers to scan instead of the automatically-detected ModuleLayers. (The parameter is of type Object[] for backwards compatibility with JDK 7 and JDK 8, but the argument should be of type ModuleLayer[].)