public final class ClassPath
extends java.lang.Object
ClassLoader
and finds all loadable classes and resources.
ClassPath
We recommend using ClassGraph
instead of ClassPath
. ClassGraph improves upon ClassPath
in several ways,
including addressing many of its limitations. Limitations of ClassPath
include:
URLClassLoader
instances or
the system class loader. This means it does
not look for classes in the module path.
file:
URLs. This means that it does not understand jrt:/
URLs, among others.
$
in its name is a nested class.
ClassPath
and symlinksIn the case of directory classloaders, symlinks are supported but cycles are not traversed. This guarantees discovery of each unique loadable resource. However, not all possible aliases for resources on cyclic paths will be listed.
Modifier and Type | Class and Description |
---|---|
static class |
ClassPath.ClassInfo
Represents a class that can be loaded through
ClassPath.ClassInfo.load() . |
(package private) static class |
ClassPath.LocationInfo
Represents a single location (a directory or a jar file) in the class path and is responsible
for scanning resources from this location.
|
static class |
ClassPath.ResourceInfo
Represents a class path resource that can be either a class file or any other resource file
loadable from the class path.
|
Modifier and Type | Field and Description |
---|---|
private static java.lang.String |
CLASS_FILE_NAME_EXTENSION |
private static Splitter |
CLASS_PATH_ATTRIBUTE_SEPARATOR
Separator for the Class-Path manifest attribute value in jar files.
|
private static java.util.logging.Logger |
logger |
private ImmutableSet<ClassPath.ResourceInfo> |
resources |
Modifier | Constructor and Description |
---|---|
private |
ClassPath(ImmutableSet<ClassPath.ResourceInfo> resources) |
Modifier and Type | Method and Description |
---|---|
static ClassPath |
from(java.lang.ClassLoader classloader)
Returns a
ClassPath representing all classes and resources loadable from classloader and its ancestor class loaders. |
ImmutableSet<ClassPath.ClassInfo> |
getAllClasses()
Returns all classes loadable from the current class path.
|
private static ImmutableList<java.net.URL> |
getClassLoaderUrls(java.lang.ClassLoader classloader) |
(package private) static java.lang.String |
getClassName(java.lang.String filename) |
(package private) static ImmutableMap<java.io.File,java.lang.ClassLoader> |
getClassPathEntries(java.lang.ClassLoader classloader) |
(package private) static java.net.URL |
getClassPathEntry(java.io.File jarFile,
java.lang.String path)
Returns the absolute uri of the Class-Path entry value as specified in JAR
File Specification.
|
(package private) static ImmutableSet<java.io.File> |
getClassPathFromManifest(java.io.File jarFile,
java.util.jar.Manifest manifest)
Returns the class path URIs specified by the
Class-Path manifest attribute, according
to JAR
File Specification. |
ImmutableSet<ClassPath.ResourceInfo> |
getResources()
Returns all resources loadable from the current class path, including the class files of all
loadable classes but excluding the "META-INF/MANIFEST.MF" file.
|
ImmutableSet<ClassPath.ClassInfo> |
getTopLevelClasses()
Returns all top level classes loadable from the current class path.
|
ImmutableSet<ClassPath.ClassInfo> |
getTopLevelClasses(java.lang.String packageName)
Returns all top level classes whose package name is
packageName . |
ImmutableSet<ClassPath.ClassInfo> |
getTopLevelClassesRecursive(java.lang.String packageName)
Returns all top level classes whose package name is
packageName or starts with packageName followed by a '.'. |
(package private) static ImmutableSet<ClassPath.LocationInfo> |
locationsFrom(java.lang.ClassLoader classloader)
Returns all locations that
classloader and parent loaders load classes and resources
from. |
(package private) static ImmutableList<java.net.URL> |
parseJavaClassPath()
Returns the URLs in the class path specified by the
java.class.path system property. |
(package private) static java.io.File |
toFile(java.net.URL url) |
private static final java.util.logging.Logger logger
private static final Splitter CLASS_PATH_ATTRIBUTE_SEPARATOR
private static final java.lang.String CLASS_FILE_NAME_EXTENSION
private final ImmutableSet<ClassPath.ResourceInfo> resources
private ClassPath(ImmutableSet<ClassPath.ResourceInfo> resources)
public static ClassPath from(java.lang.ClassLoader classloader) throws java.io.IOException
ClassPath
representing all classes and resources loadable from classloader
and its ancestor class loaders.
Warning: ClassPath
can find classes and resources only from:
URLClassLoader
instances' file:
URLs
URLClassLoader
(as in Java 9), ClassPath
searches the files from the java.class.path
system property.
java.io.IOException
- if the attempt to read class path resources (jar files or directories)
failed.public ImmutableSet<ClassPath.ResourceInfo> getResources()
public ImmutableSet<ClassPath.ClassInfo> getAllClasses()
public ImmutableSet<ClassPath.ClassInfo> getTopLevelClasses()
ClassPath.ClassInfo.isTopLevel()
).public ImmutableSet<ClassPath.ClassInfo> getTopLevelClasses(java.lang.String packageName)
packageName
.public ImmutableSet<ClassPath.ClassInfo> getTopLevelClassesRecursive(java.lang.String packageName)
packageName
or starts with packageName
followed by a '.'.static ImmutableSet<ClassPath.LocationInfo> locationsFrom(java.lang.ClassLoader classloader)
classloader
and parent loaders load classes and resources
from. Callers can scan individual locations selectively
or even in parallel.static ImmutableSet<java.io.File> getClassPathFromManifest(java.io.File jarFile, @CheckForNull java.util.jar.Manifest manifest)
Class-Path
manifest attribute, according
to JAR
File Specification. If manifest
is null, it means the jar file has no manifest, and
an empty set will be returned.static ImmutableMap<java.io.File,java.lang.ClassLoader> getClassPathEntries(java.lang.ClassLoader classloader)
private static ImmutableList<java.net.URL> getClassLoaderUrls(java.lang.ClassLoader classloader)
static ImmutableList<java.net.URL> parseJavaClassPath()
java.class.path
system property.static java.net.URL getClassPathEntry(java.io.File jarFile, java.lang.String path) throws java.net.MalformedURLException
java.net.MalformedURLException
static java.lang.String getClassName(java.lang.String filename)
static java.io.File toFile(java.net.URL url)