Class ClassPath


  • public final class ClassPath
    extends java.lang.Object
    Scans the source of a ClassLoader and finds all loadable classes and resources.

    Warning: Current limitations:

    • Looks only for files and JARs in URLs available from URLClassLoader instances or the system class loader.
    • Only understands file: URLs.

    In 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.

    Since:
    14.0
    • Field Detail

      • logger

        private static final java.util.logging.Logger logger
      • CLASS_PATH_ATTRIBUTE_SEPARATOR

        private static final Splitter CLASS_PATH_ATTRIBUTE_SEPARATOR
        Separator for the Class-Path manifest attribute value in jar files.
      • CLASS_FILE_NAME_EXTENSION

        private static final java.lang.String CLASS_FILE_NAME_EXTENSION
        See Also:
        Constant Field Values
    • Method Detail

      • from

        public static ClassPath from​(java.lang.ClassLoader classloader)
                              throws java.io.IOException
        Returns a 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
        • the system class loader. To search the system class loader even when it is not a URLClassLoader (as in Java 9), ClassPath searches the files from the java.class.path system property.
        Throws:
        java.io.IOException - if the attempt to read class path resources (jar files or directories) failed.
      • getResources

        public 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.
      • getTopLevelClasses

        public ImmutableSet<ClassPath.ClassInfo> getTopLevelClasses​(java.lang.String packageName)
        Returns all top level classes whose package name is packageName.
      • getTopLevelClassesRecursive

        public 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 '.'.
      • locationsFrom

        static ImmutableSet<ClassPath.LocationInfo> locationsFrom​(java.lang.ClassLoader classloader)
        Returns all locations that classloader and parent loaders load classes and resources from. Callers can scan individual locations selectively or even in parallel.
      • getClassPathFromManifest

        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. If manifest is null, it means the jar file has no manifest, and an empty set will be returned.
      • getClassPathEntries

        static ImmutableMap<java.io.File,​java.lang.ClassLoader> getClassPathEntries​(java.lang.ClassLoader classloader)
      • getClassLoaderUrls

        private static ImmutableList<java.net.URL> getClassLoaderUrls​(java.lang.ClassLoader classloader)
      • parseJavaClassPath

        static ImmutableList<java.net.URL> parseJavaClassPath()
        Returns the URLs in the class path specified by the java.class.path system property.
      • getClassPathEntry

        static java.net.URL getClassPathEntry​(java.io.File jarFile,
                                              java.lang.String path)
                                       throws java.net.MalformedURLException
        Returns the absolute uri of the Class-Path entry value as specified in JAR File Specification. Even though the specification only talks about relative urls, absolute urls are actually supported too (for example, in Maven surefire plugin).
        Throws:
        java.net.MalformedURLException
      • getClassName

        static java.lang.String getClassName​(java.lang.String filename)
      • toFile

        static java.io.File toFile​(java.net.URL url)