Top Description Inners Fields Constructors Methods
io.github.classgraph

public Class ClassGraph

extends Object
Class Inheritance
Imports
java.io.File, .InputStream, java.lang.reflect.AccessibleObject, java.net.URI, .URL, java.nio.ByteBuffer, .MappedByteBuffer, java.nio.channels.FileChannel, java.util.List, java.util.concurrent.Callable, .CancellationException, .ExecutionException, .ExecutorService, .Executors, .Future, .LinkedBlockingQueue, java.util.regex.Pattern, nonapi.io.github.classgraph.classpath.SystemJarFinder, nonapi.io.github.classgraph.concurrency.AutoCloseableExecutorService, .InterruptionChecker, nonapi.io.github.classgraph.reflection.ReflectionUtils, nonapi.io.github.classgraph.scanspec.AcceptReject, .ScanSpec, nonapi.io.github.classgraph.utils.JarUtils, .LogNode, .VersionFinder

Uber-fast, ultra-lightweight Java classpath and module path scanner. Scans classfiles in the classpath and/or module path by parsing the classfile binary format directly rather than by using reflection.

Documentation: https://github.com/classgraph/classgraph/wiki

Nested and Inner Type Summary

Modifier and TypeClass and Description
public static enum
ClassGraph.CircumventEncapsulationMethod

Method to use to attempt to circumvent encapsulation in JDK 16+, in order to get access to a classloader's private classpath.

public static interface
ClassGraph.ClasspathElementFilter

Add a classpath element filter.

public static interface
ClassGraph.ClasspathElementURLFilter

Add a classpath element URL filter.

public static interface
ClassGraph.FailureHandler

A callback used to handle failure during an asynchronous scan.

public static interface
ClassGraph.ScanResultProcessor

A callback used to process the result of a successful asynchronous scan.

Field Summary

Modifier and TypeField and Description
public static ClassGraph.CircumventEncapsulationMethod
CIRCUMVENT_ENCAPSULATION

If you are running on JDK 16+, the JDK enforces strong encapsulation, and ClassGraph may be unable to read the classpath from your classloader if the classloader does not make the classpath available via a public method or field.

pack-priv static final int
DEFAULT_NUM_WORKER_THREADS

The default number of worker threads to use while scanning.

private final ReflectionUtils
pack-priv ScanSpec
scanSpec

The scanning specification.

private LogNode
topLevelLog

If non-null, log while scanning.

Constructor Summary

AccessConstructor and Description
public
ClassGraph()

Construct a ClassGraph instance.

Method Summary

Modifier and TypeMethod and Description
public ClassGraph

Returns:

this (for method chaining).
acceptClasses
(final String...
The fully-qualified names of classes to scan (using '.' as a separator). To match a class name by glob in any package, you must include a package glob too, e.g. "*.*Suffix".
classNames
)

Scan one or more specific classes, without scanning other classes in the same package unless the package is itself accepted.

public ClassGraph

Returns:

this (for method chaining).
acceptClasspathElementsContainingResourcePath
(final String...
The resource paths, any of which must be present in a classpath element for the classpath element to be scanned. May contain a wildcard glob ('*').
resourcePaths
)

Accept classpath elements based on resource paths.

public ClassGraph

Returns:

this (for method chaining).
acceptJars
(final String...
The leafnames of the jars that should be scanned (e.g. "mylib.jar"). May contain a wildcard glob ("mylib-*.jar").
jarLeafNames
)

Accept one or more jars.

public ClassGraph

Returns:

this (for method chaining).
acceptLibOrExtJars
(final String...
The leafnames of the lib/ext jar(s) that should be scanned (e.g. "mylib.jar"). May contain a wildcard glob ('*'). Note that if you call this method with no parameters, all JRE/JDK "lib/" or "ext/" jars will be accepted.
jarLeafNames
)

Accept one or more jars in a JRE/JDK "lib/" or "ext/" directory (these directories are not scanned unless enableSystemJarsAndModules() is called, by association with the JRE/JDK).

public ClassGraph

Returns:

this (for method chaining).
acceptModules
(final String...
The names of the modules that should be scanned. May contain a wildcard glob ('*').
moduleNames
)

Accept one or more modules for scanning.

private void
acceptOrRejectLibOrExtJars(final boolean
if true, add to accept, otherwise add to reject.
accept
,
final String...
the jar leaf names to accept
jarLeafNames
)

Add lib or ext jars to accept or reject.

public ClassGraph

Returns:

this (for method chaining).
acceptPackages
(final String...
The fully-qualified names of packages to scan (using '.' as a separator). May include a glob wildcard ('*').
packageNames
)

Scan one or more specific packages and their sub-packages.

public ClassGraph

Returns:

this (for method chaining).
acceptPackagesNonRecursive
(final String...
The fully-qualified names of packages to scan (with '.' as a separator). May not include a glob wildcard ('*').
packageNames
)

Scan one or more specific packages, without recursively scanning sub-packages unless they are themselves accepted.

public ClassGraph

Returns:

this (for method chaining).
acceptPaths
(final String...
The paths to scan, relative to the package root of the classpath element (with '/' as a separator). May include a glob wildcard ('*').
paths
)

Scan one or more specific paths, and their sub-directories or nested paths.

public ClassGraph

Returns:

this (for method chaining).
acceptPathsNonRecursive
(final String...
The paths to scan, relative to the package root of the classpath element (with '/' as a separator). May not include a glob wildcard ('*').
paths
)

Scan one or more specific paths, without recursively scanning sub-directories or nested paths unless they are themselves accepted.

public ClassGraph

Returns:

this (for method chaining).
addClassLoader
(final ClassLoader
The additional ClassLoader to scan.
classLoader
)

Add a ClassLoader to the list of ClassLoaders to scan.

public ClassGraph

Returns:

this (for method chaining).
addModuleLayer
(final Object
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.)
moduleLayer
)

Add a ModuleLayer to the list of ModuleLayers to scan.

public ClassGraph

Returns:

this (for method chaining).
blacklistClasses
(final String...
The fully-qualified names of classes to reject (using '.' as a separator).
classNames
)
Deprecated Use rejectClasses(String...) instead.

Use rejectClasses(String...) instead.

public ClassGraph

Returns:

this (for method chaining).
blacklistClasspathElementsContainingResourcePath
(final String...
The resource paths which cause a classpath not to be scanned if any are present in a classpath element for the classpath element. May contain a wildcard glob ('*').
resourcePaths
)

Use rejectClasspathElementsContainingResourcePath(String...) instead.

public ClassGraph

Returns:

this (for method chaining).
blacklistJars
(final String...
The leafnames of the jars that should be scanned (e.g. "badlib.jar"). May contain a wildcard glob ("badlib-*.jar").
jarLeafNames
)
Deprecated Use rejectJars(String...) instead.

Use rejectJars(String...) instead.

public ClassGraph

Returns:

this (for method chaining).
blacklistLibOrExtJars
(final String...
The leafnames of the lib/ext jar(s) that should not be scanned (e.g. "jre/lib/badlib.jar"). May contain a wildcard glob ('*'). If you call this method with no parameters, all JRE/JDK "lib/" or "ext/" jars will be rejected.
jarLeafNames
)
Deprecated Use rejectLibOrExtJars(String...) instead.

Use rejectLibOrExtJars(String...) instead.

public ClassGraph

Returns:

this (for method chaining).
blacklistModules
(final String...
The names of the modules that should not be scanned. May contain a wildcard glob ('*').
moduleNames
)
Deprecated Use rejectModules(String...) instead.

Use rejectModules(String...) instead.

public ClassGraph

Returns:

this (for method chaining).
blacklistPackages
(final String...
The fully-qualified names of packages to reject (with '.' as a separator). May include a glob wildcard ('*').
packageNames
)
Deprecated Use rejectPackages(String...) instead.

Use rejectPackages(String...) instead.

public ClassGraph

Returns:

this (for method chaining).
blacklistPaths
(final String...
The paths to reject (with '/' as a separator). May include a glob wildcard ('*').
paths
)
Deprecated Use rejectPaths(String...) instead.

Use rejectPaths(String...) instead.

public ClassGraph

Returns:

this (for method chaining).
disableDirScanning
()

Disables the scanning of directories.

public ClassGraph

Returns:

this (for method chaining).
disableJarScanning
()

Disables the scanning of jarfiles.

public ClassGraph

Returns:

this (for method chaining).
disableModuleScanning
()

Disables the scanning of modules.

public ClassGraph

Returns:

this (for method chaining).
disableNestedJarScanning
()

Disables the scanning of nested jarfiles (jarfiles within jarfiles).

public ClassGraph

Returns:

this (for method chaining).
disableRuntimeInvisibleAnnotations
()

Causes only runtime visible annotations to be scanned (causes runtime invisible annotations to be ignored).

public ClassGraph

Returns:

this (for method chaining).
enableAllInfo
()

Enables the scanning of all classes, fields, methods, annotations, and static final field constant initializer values, and ignores all visibility modifiers, so that both public and non-public classes, fields and methods are all scanned.

public ClassGraph

Returns:

this (for method chaining).
enableAnnotationInfo
()

Enables the saving of annotation info (for class, field, method and method parameter annotations) during the scan.

public ClassGraph

Returns:

this (for method chaining).
enableClassInfo
()

Enables the scanning of classfiles, producing ClassInfo objects in the ScanResult.

public ClassGraph

Returns:

this (for method chaining).
enableExternalClasses
()

Causes ClassGraph to return classes that are not in the accepted packages, but that are directly referred to by classes within accepted packages as a superclass, implemented interface or annotation.

public ClassGraph

Returns:

this (for method chaining).
enableFieldInfo
()

Enables the saving of field info during the scan.

public ClassGraph

Returns:

this (for method chaining).
enableInterClassDependencies
()

Enables the determination of inter-class dependencies, which may be read by calling ClassInfo#getClassDependencies(), ScanResult#getClassDependencyMap() or ScanResult#getReverseClassDependencyMap().

public ClassGraph

Returns:

this (for method chaining).
enableMemoryMapping
()

If true, use a MappedByteBuffer rather than the FileChannel API to open files, which may be faster for large classpaths consisting of many large jarfiles, but uses up virtual memory space.

public ClassGraph

Returns:

this (for method chaining).
enableMethodInfo
()

Enables the saving of method info during the scan.

public ClassGraph

Returns:

this (for method chaining).
enableMultiReleaseVersions
()

If true, provide all versions of a multi-release resource using their multi-release path prefix, instead of just the one the running JVM would select.

public ClassGraph

Returns:

this (for method chaining).
enableRealtimeLogging
()

Enables logging by calling verbose(), and then sets the logger to "realtime logging mode", where log entries are written out immediately to stderr, rather than only after the scan has completed.

public ClassGraph

Returns:

this (for method chaining).
enableRemoteJarScanning
()

Enable classpath elements to be fetched from remote ("http:"/"https:") URLs (or URLs with custom schemes).

public ClassGraph

Returns:

this (for method chaining).
enableStaticFinalFieldConstantInitializerValues
()

Enables the saving of static final field constant initializer values.

public ClassGraph

Returns:

this (for method chaining).
enableSystemJarsAndModules
()

Enables the scanning of system packages ("java.*", "javax.*", "javafx.*", "jdk.*", "oracle.*", "sun.*") -- these are not scanned by default for speed.

public ClassGraph

Returns:

this (for method chaining).
enableURLScheme
(final String
the URL scheme string, e.g. "resource" for a custom "resource:" URL scheme.
scheme
)

Enable classpath elements to be fetched from URL connections with the specified URL scheme (also works for any custom URL schemes that have been defined, as long as they have more than two characters, in order to not conflict with Windows drive letters).

public ClassGraph

Returns:

this (for method chaining).
filterClasspathElements
(final ClassGraph.ClasspathElementFilter
The filter function to use. This function should return true if the classpath element path should be scanned, and false if not.
classpathElementFilter
)

Add a classpath element filter.

public ClassGraph

Returns:

this (for method chaining).
filterClasspathElementsByURL
(final ClassGraph.ClasspathElementURLFilter
The filter function to use. This function should return true if the classpath element URL should be scanned, and false if not.
classpathElementURLFilter
)

Add a classpath element filter.

public String

Returns:

a classpath path string consisting of the unique directories and jarfiles on the classpath, in classpath resolution order.
getClasspath
()

Returns the list of all unique File objects representing directories or zip/jarfiles on the classpath, in classloader resolution order, in the form of a classpath path string.

public List<File>

Returns:

a List<File> consisting of the unique directories and jarfiles on the classpath, in classpath resolution order.
getClasspathFiles
()

Returns the list of all unique File objects representing directories or zip/jarfiles on the classpath, in classloader resolution order.

pack-priv ScanResult

Returns:

a ScanResult object representing the result of the scan (can only be used for determining classpath).
getClasspathScanResult
(final AutoCloseableExecutorService
The executor service.
executorService
)

Get a ScanResult that can be used for determining the classpath.

public List<URI>

Returns:

the unique classpath elements and modules, as a list of URI objects.
getClasspathURIs
()

Returns the ordered list of all unique URI objects representing directory/jar classpath elements and modules.

public List<URL>

Returns:

the unique classpath elements and modules, as a list of URL objects.
getClasspathURLs
()

Returns the ordered list of all unique URL objects representing directory/jar classpath elements and modules.

public ModulePathInfo

Returns:

The ModulePathInfo.
getModulePathInfo
()

Get the module path info provided on the commandline with --module-path, --add-modules, --patch-module, --add-exports, --add-opens, and --add-reads.

public List<ModuleRef>

Returns:

a list of ModuleRef references for all the visible modules.
getModules
()

Returns ModuleRef references for all the visible modules.

public static String

Returns:

the ClassGraph version, or "unknown" if it could not be determined.
getVersion
()

Get the version number of ClassGraph.

public ClassGraph

Returns:

this (for method chaining).
ignoreClassVisibility
()

Causes class visibility to be ignored, enabling private, package-private and protected classes to be scanned.

public ClassGraph

Returns:

this (for method chaining).
ignoreFieldVisibility
()

Causes field visibility to be ignored, enabling private, package-private and protected fields to be scanned.

public ClassGraph

Returns:

this (for method chaining).
ignoreMethodVisibility
()

Causes method visibility to be ignored, enabling private, package-private and protected methods to be scanned.

public ClassGraph

Returns:

this (for method chaining).
ignoreParentClassLoaders
()

Ignore parent classloaders (i.e. only obtain paths to scan from classloaders that are not the parent of another classloader).

public ClassGraph

Returns:

this (for method chaining).
ignoreParentModuleLayers
()

Ignore parent module layers (i.e. only scan module layers that are not the parent of another module layer).

public ClassGraph

Returns:

this (for method chaining).
initializeLoadedClasses
()

Causes classes loaded using ClassInfo#loadClass() to be are initialized after class loading (the default is to not initialize classes).

public ClassGraph

Returns:

this (for method chaining).
overrideClassLoaders
(final ClassLoader...
The ClassLoaders to scan instead of the automatically-detected ClassLoaders.
overrideClassLoaders
)

Completely override (and ignore) system ClassLoaders and the java.class.path system property.

public ClassGraph

Returns:

this (for method chaining).
overrideClasspath
(final String
The custom classpath to use for scanning, with path elements separated by File.pathSeparatorChar.
overrideClasspath
)

Override the automatically-detected classpath with a custom path, with path elements separated by File.pathSeparatorChar.

public ClassGraph

Returns:

this (for method chaining).
overrideClasspath
(final Iterable<?>
The custom classpath to use for scanning, with path elements separated by File.pathSeparatorChar.
overrideClasspathElements
)

Override the automatically-detected classpath with a custom path.

public ClassGraph

Returns:

this (for method chaining).
overrideClasspath
(final Object...
The custom classpath to use for scanning, with path elements separated by File.pathSeparatorChar.
overrideClasspathElements
)

Override the automatically-detected classpath with a custom path.

public ClassGraph

Returns:

this (for method chaining).
overrideModuleLayers
(final Object...
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[].)
overrideModuleLayers
)

Completely override (and ignore) the visible ModuleLayers, and instead scan the requested ModuleLayers.

public ClassGraph

Returns:

this (for method chaining).
rejectClasses
(final String...
The fully-qualified names of classes to reject (using '.' as a separator). To match a class name by glob in any package, you must include a package glob too, e.g. "*.*Suffix".
classNames
)

Specifically reject one or more specific classes, preventing them from being scanned even if they are in a accepted package.

public ClassGraph

Returns:

this (for method chaining).
rejectClasspathElementsContainingResourcePath
(final String...
The resource paths which cause a classpath not to be scanned if any are present in a classpath element for the classpath element. May contain a wildcard glob ('*').
resourcePaths
)

Reject classpath elements based on resource paths.

public ClassGraph

Returns:

this (for method chaining).
rejectJars
(final String...
The leafnames of the jars that should be scanned (e.g. "badlib.jar"). May contain a wildcard glob ("badlib-*.jar").
jarLeafNames
)

Reject one or more jars, preventing them from being scanned.

public ClassGraph

Returns:

this (for method chaining).
rejectLibOrExtJars
(final String...
The leafnames of the lib/ext jar(s) that should not be scanned (e.g. "jre/lib/badlib.jar"). May contain a wildcard glob ('*'). If you call this method with no parameters, all JRE/JDK "lib/" or "ext/" jars will be rejected.
jarLeafNames
)

Reject one or more jars in a JRE/JDK "lib/" or "ext/" directory, preventing them from being scanned.

public ClassGraph

Returns:

this (for method chaining).
rejectModules
(final String...
The names of the modules that should not be scanned. May contain a wildcard glob ('*').
moduleNames
)

Reject one or more modules, preventing them from being scanned.

public ClassGraph

Returns:

this (for method chaining).
rejectPackages
(final String...
The fully-qualified names of packages to reject (with '.' as a separator). May include a glob wildcard ('*').
packageNames
)

Prevent the scanning of one or more specific packages and their sub-packages.

public ClassGraph

Returns:

this (for method chaining).
rejectPaths
(final String...
The paths to reject (with '/' as a separator). May include a glob wildcard ('*').
paths
)

Prevent the scanning of one or more specific paths and their sub-directories / nested paths.

public ClassGraph

Returns:

this (for method chaining).
removeTemporaryFilesAfterScan
()

Remove temporary files, including nested jarfiles (jarfiles within jarfiles, which have to be extracted during scanning in order to be read) from their temporary directory as soon as the scan has completed.

public ScanResult

Returns:

a ScanResult object representing the result of the scan.
scan
(final ExecutorService
A custom ExecutorService to use for scheduling worker tasks. This ExecutorService should start tasks in FIFO order to avoid a deadlock during scan, i.e. be sure to construct the ExecutorService with a LinkedBlockingQueue as its task queue. (This is the default for Executors#newFixedThreadPool(int).)
executorService
,
final int
The number of parallel tasks to break the work into during the most CPU-intensive stage of classpath scanning. Ideally the ExecutorService will have at least this many threads available.
numParallelTasks
)

Scans the classpath using the requested ExecutorService and the requested degree of parallelism, blocking until the scan is complete.

public ScanResult

Returns:

a ScanResult object representing the result of the scan.
scan
(final int
The number of worker threads to start up.
numThreads
)

Scans the classpath with the requested number of threads, blocking until the scan is complete.

public ScanResult

Returns:

a ScanResult object representing the result of the scan.
scan
()

Scans the classpath, blocking until the scan is complete.

public void
scanAsync(final ExecutorService
A custom ExecutorService to use for scheduling worker tasks.
executorService
,
final int
The number of parallel tasks to break the work into during the most CPU-intensive stage of classpath scanning. Ideally the ExecutorService will have at least this many threads available.
numParallelTasks
,
final ClassGraph.ScanResultProcessor
A ScanResultProcessor callback to run on successful scan.
scanResultProcessor
,
final ClassGraph.FailureHandler
A FailureHandler callback to run on failed scan. This is passed any Throwable thrown during the scan.
failureHandler
)

Asynchronously scans the classpath, calling a ScanResultProcessor callback on success or a FailureHandler callback on failure.

private Future<ScanResult>

Returns:

a Future<ScanResult>, that when resolved using get() yields a new ScanResult object representing the result of the scan.
scanAsync
(final boolean
If true, performing a scan. If false, only fetching the classpath.
performScan
,
final ExecutorService
A custom ExecutorService to use for scheduling worker tasks.
executorService
,
final int
The number of parallel tasks to break the work into during the most CPU-intensive stage of classpath scanning. Ideally the ExecutorService will have at least this many threads available.
numParallelTasks
)

Asynchronously scans the classpath for matching files, returning a Future<ScanResult>.

public Future<ScanResult>

Returns:

a Future<ScanResult>, that when resolved using get() yields a new ScanResult object representing the result of the scan.
scanAsync
(final ExecutorService
A custom ExecutorService to use for scheduling worker tasks.
executorService
,
final int
The number of parallel tasks to break the work into during the most CPU-intensive stage of classpath scanning. Ideally the ExecutorService will have at least this many threads available.
numParallelTasks
)

Asynchronously scans the classpath for matching files, returning a Future<ScanResult>.

public ClassGraph

Returns:

this (for method chaining).
setMaxBufferedJarRAMSize
(final int
The max RAM size to use for deflated inner jars or downloaded jars. This is the limit per jar, not for the whole classpath.
maxBufferedJarRAMSize
)

The maximum size of an inner (nested) jar that has been deflated (i.e. compressed, not stored) within an outer jar, before it has to be spilled to disk rather than stored in a RAM-backed ByteBuffer when it is deflated, in order for the inner jar's entries to be read.

public ClassGraph

Returns:

this (for method chaining).
verbose
()

Switches on verbose logging to System.err.

public ClassGraph

Returns:

this (for method chaining).
verbose
(final boolean
if true, enable verbose logging.
verbose
)

Switches on verbose logging to System.err if verbose is true.

public ClassGraph

Returns:

this (for method chaining).
whitelistClasses
(final String...
The fully-qualified names of classes to scan (using '.' as a separator).
classNames
)
Deprecated Use acceptClasses(String...) instead.

Use acceptClasses(String...) instead.

public ClassGraph

Returns:

this (for method chaining).
whitelistClasspathElementsContainingResourcePath
(final String...
The resource paths, any of which must be present in a classpath element for the classpath element to be scanned. May contain a wildcard glob ('*').
resourcePaths
)

Use acceptClasspathElementsContainingResourcePath(String...) instead.

public ClassGraph

Returns:

this (for method chaining).
whitelistJars
(final String...
The leafnames of the jars that should be scanned (e.g. "mylib.jar"). May contain a wildcard glob ("mylib-*.jar").
jarLeafNames
)
Deprecated Use acceptJars(String...) instead.

Use acceptJars(String...) instead.

public ClassGraph

Returns:

this (for method chaining).
whitelistLibOrExtJars
(final String...
The leafnames of the lib/ext jar(s) that should be scanned (e.g. "mylib.jar"). May contain a wildcard glob ('*'). Note that if you call this method with no parameters, all JRE/JDK "lib/" or "ext/" jars will be accepted.
jarLeafNames
)
Deprecated Use acceptLibOrExtJars(String...) instead.

Use acceptLibOrExtJars(String...) instead.

public ClassGraph

Returns:

this (for method chaining).
whitelistModules
(final String...
The names of the modules that should be scanned. May contain a wildcard glob ('*').
moduleNames
)
Deprecated Use acceptModules(String...) instead.

Use acceptModules(String...) instead.

public ClassGraph

Returns:

this (for method chaining).
whitelistPackages
(final String...
The fully-qualified names of packages to scan (using '.' as a separator). May include a glob wildcard ('*').
packageNames
)
Deprecated Use acceptPackages(String...) instead.

Use acceptPackages(String...) instead.

public ClassGraph

Returns:

this (for method chaining).
whitelistPackagesNonRecursive
(final String...
The fully-qualified names of packages to scan (with '.' as a separator). May not include a glob wildcard ('*').
packageNames
)
Deprecated Use acceptPackagesNonRecursive(String...) instead.

Use acceptPackagesNonRecursive(String...) instead.

public ClassGraph

Returns:

this (for method chaining).
whitelistPaths
(final String...
The paths to scan, relative to the package root of the classpath element (with '/' as a separator). May include a glob wildcard ('*').
paths
)
Deprecated Use acceptPaths(String...) instead.

Use acceptPaths(String...) instead.

public ClassGraph

Returns:

this (for method chaining).
whitelistPathsNonRecursive
(final String...
The paths to scan, relative to the package root of the classpath element (with '/' as a separator). May not include a glob wildcard ('*').
paths
)
Deprecated Use acceptPathsNonRecursive(String...) instead.

Use acceptPathsNonRecursive(String...) instead.

Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait