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.
      • enableInterClassDependencies

        public boolean enableInterClassDependencies
        If true, enables the determination of inter-class dependencies.
      • 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.
      • enableSystemJarsAndModules

        public boolean enableSystemJarsAndModules
        If true, system jarfiles (rt.jar) and system packages and modules (java.*, jre.*, etc.) should be 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.)
      • enableRemoteJarScanning

        public boolean enableRemoteJarScanning
        If true, enable http(s) classpath elements to be fetched to local temporary files and scanned. Disabled by default as this may present a security vulnerability, since classes from downloaded jars can be subsequently loaded using ClassInfo.loadClass(java.lang.Class<T>, boolean).
      • 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.
    • Constructor Detail

      • ScanSpec

        public ScanSpec()
        Constructor for deserialization.
    • Method Detail

      • sortPrefixes

        public void sortPrefixes()
        Sort prefixes to ensure correct whitelist/blacklist evaluation (see Issue #167).
      • 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[].)
      • dirWhitelistMatchStatus

        public ScanSpec.ScanSpecPathMatch dirWhitelistMatchStatus​(String relativePath)
        Returns true if the given directory path is a descendant of a blacklisted path, or an ancestor or descendant of a whitelisted path. The path should end in "/".
      • classfileIsSpecificallyWhitelisted

        public boolean classfileIsSpecificallyWhitelisted​(String relativePath)
        Returns true if the given relative path (for a classfile name, including ".class") matches a specifically-whitelisted (and non-blacklisted) classfile's relative path.
      • classOrPackageIsSpecificallyWhitelisted

        public boolean classOrPackageIsSpecificallyWhitelisted​(String className)
        Returns true if the class is specifically whitelisted, or is within a whitelisted package.
      • classOrPackageIsBlacklisted

        public boolean classOrPackageIsBlacklisted​(String className)
        Returns true if the class is specifically blacklisted, or is within a blacklisted package.
      • log

        public void log​(LogNode log)
        Parameters:
        log - The LogNode to log to.