Class ClasspathHelper


  • public abstract class ClasspathHelper
    extends java.lang.Object
    Helper methods for working with the classpath.
    • Constructor Summary

      Constructors 
      Constructor Description
      ClasspathHelper()  
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      static java.lang.ClassLoader[] classLoaders​(java.lang.ClassLoader... classLoaders)
      Returns an array of class Loaders initialized from the specified array.
      static java.lang.String cleanPath​(java.net.URL url)
      Cleans the URL.
      static java.lang.ClassLoader contextClassLoader()
      Gets the current thread context class loader.
      private static java.util.Collection<java.net.URL> distinctUrls​(java.util.Collection<java.net.URL> urls)  
      static java.net.URL forClass​(java.lang.Class<?> aClass, java.lang.ClassLoader... classLoaders)
      Returns the URL that contains a Class.
      static java.util.Collection<java.net.URL> forClassLoader()
      Returns a distinct collection of URLs based on URLs derived from class loaders.
      static java.util.Collection<java.net.URL> forClassLoader​(java.lang.ClassLoader... classLoaders)
      Returns a distinct collection of URLs based on URLs derived from class loaders.
      static java.util.Collection<java.net.URL> forJavaClassPath()
      Returns a distinct collection of URLs based on the java.class.path system property.
      static java.util.Collection<java.net.URL> forManifest()
      Returns a distinct collection of URLs based on URLs derived from class loaders expanded with Manifest information.
      static java.util.Collection<java.net.URL> forManifest​(java.lang.Iterable<java.net.URL> urls)
      Returns a distinct collection of URLs by expanding the specified URLs with Manifest information.
      static java.util.Collection<java.net.URL> forManifest​(java.net.URL url)
      Returns a distinct collection of URLs from a single URL based on the Manifest information.
      static java.util.Collection<java.net.URL> forPackage​(java.lang.String name, java.lang.ClassLoader... classLoaders)
      Returns a distinct collection of URLs based on a package name.
      static java.util.Collection<java.net.URL> forResource​(java.lang.String resourceName, java.lang.ClassLoader... classLoaders)
      Returns a distinct collection of URLs based on a resource.
      static java.net.URL forWebInfClasses​(javax.servlet.ServletContext servletContext)
      Returns the URL of the WEB-INF/classes folder.
      static java.util.Collection<java.net.URL> forWebInfLib​(javax.servlet.ServletContext servletContext)
      Returns a distinct collection of URLs based on the WEB-INF/lib folder.
      private static java.lang.String resourceName​(java.lang.String name)  
      static java.lang.ClassLoader staticClassLoader()
      Gets the class loader of this library.
      (package private) static java.net.URL tryToGetValidUrl​(java.lang.String workingDir, java.lang.String path, java.lang.String filename)  
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • ClasspathHelper

        public ClasspathHelper()
    • Method Detail

      • contextClassLoader

        public static java.lang.ClassLoader contextClassLoader()
        Gets the current thread context class loader. Thread.currentThread().getContextClassLoader().
        Returns:
        the context class loader, may be null
      • staticClassLoader

        public static java.lang.ClassLoader staticClassLoader()
        Gets the class loader of this library. Reflections.class.getClassLoader().
        Returns:
        the static library class loader, may be null
      • classLoaders

        public static java.lang.ClassLoader[] classLoaders​(java.lang.ClassLoader... classLoaders)
        Returns an array of class Loaders initialized from the specified array.

        If the input is null or empty, it defaults to both contextClassLoader() and staticClassLoader()

        Returns:
        the array of class loaders, not null
      • forPackage

        public static java.util.Collection<java.net.URL> forPackage​(java.lang.String name,
                                                                    java.lang.ClassLoader... classLoaders)
        Returns a distinct collection of URLs based on a package name.

        This searches for the package name as a resource, using ClassLoader.getResources(String). For example, forPackage(org.reflections) effectively returns URLs from the classpath containing packages starting with org.reflections.

        If the optional ClassLoaders are not specified, then both contextClassLoader() and staticClassLoader() are used for ClassLoader.getResources(String).

        The returned URLs retainsthe order of the given classLoaders.

        Returns:
        the collection of URLs, not null
      • forResource

        public static java.util.Collection<java.net.URL> forResource​(java.lang.String resourceName,
                                                                     java.lang.ClassLoader... classLoaders)
        Returns a distinct collection of URLs based on a resource.

        This searches for the resource name, using ClassLoader.getResources(String). For example, forResource(test.properties) effectively returns URLs from the classpath containing files of that name.

        If the optional ClassLoaders are not specified, then both contextClassLoader() and staticClassLoader() are used for ClassLoader.getResources(String).

        The returned URLs retains the order of the given classLoaders.

        Returns:
        the collection of URLs, not null
      • forClass

        public static java.net.URL forClass​(java.lang.Class<?> aClass,
                                            java.lang.ClassLoader... classLoaders)
        Returns the URL that contains a Class.

        This searches for the class using ClassLoader.getResource(String).

        If the optional ClassLoaders are not specified, then both contextClassLoader() and staticClassLoader() are used for ClassLoader.getResources(String).

        Returns:
        the URL containing the class, null if not found
      • forClassLoader

        public static java.util.Collection<java.net.URL> forClassLoader()
        Returns a distinct collection of URLs based on URLs derived from class loaders.

        This finds the URLs using URLClassLoader.getURLs() using both contextClassLoader() and staticClassLoader().

        The returned URLs retains the order of the given classLoaders.

        Returns:
        the collection of URLs, not null
      • forClassLoader

        public static java.util.Collection<java.net.URL> forClassLoader​(java.lang.ClassLoader... classLoaders)
        Returns a distinct collection of URLs based on URLs derived from class loaders.

        This finds the URLs using URLClassLoader.getURLs() using the specified class loader, searching up the parent hierarchy.

        If the optional ClassLoaders are not specified, then both contextClassLoader() and staticClassLoader() are used for ClassLoader.getResources(String).

        The returned URLs retains the order of the given classLoaders.

        Returns:
        the collection of URLs, not null
      • forJavaClassPath

        public static java.util.Collection<java.net.URL> forJavaClassPath()
        Returns a distinct collection of URLs based on the java.class.path system property.

        This finds the URLs using the java.class.path system property.

        The returned collection of URLs retains the classpath order.

        Returns:
        the collection of URLs, not null
      • forWebInfLib

        public static java.util.Collection<java.net.URL> forWebInfLib​(javax.servlet.ServletContext servletContext)
        Returns a distinct collection of URLs based on the WEB-INF/lib folder.

        This finds the URLs using the ServletContext.

        The returned URLs retains the order of the given classLoaders.

        Returns:
        the collection of URLs, not null
      • forWebInfClasses

        public static java.net.URL forWebInfClasses​(javax.servlet.ServletContext servletContext)
        Returns the URL of the WEB-INF/classes folder.

        This finds the URLs using the ServletContext.

        Returns:
        the collection of URLs, not null
      • forManifest

        public static java.util.Collection<java.net.URL> forManifest()
        Returns a distinct collection of URLs based on URLs derived from class loaders expanded with Manifest information.

        The MANIFEST.MF file can contain a Class-Path entry that defines additional jar files to be included on the classpath. This method finds the jar files using the contextClassLoader() and staticClassLoader(), before searching for any additional manifest classpaths.

        Returns:
        the collection of URLs, not null
      • forManifest

        public static java.util.Collection<java.net.URL> forManifest​(java.net.URL url)
        Returns a distinct collection of URLs from a single URL based on the Manifest information.

        The MANIFEST.MF file can contain a Class-Path entry that defines additional jar files to be included on the classpath. This method takes a single URL, tries to resolve it as a jar file, and if so, adds any additional manifest classpaths. The returned collection of URLs will always contain the input URL.

        Returns:
        the collection of URLs, not null
      • forManifest

        public static java.util.Collection<java.net.URL> forManifest​(java.lang.Iterable<java.net.URL> urls)
        Returns a distinct collection of URLs by expanding the specified URLs with Manifest information.

        The MANIFEST.MF file can contain a Class-Path entry that defines additional jar files to be included on the classpath. This method takes each URL in turn, tries to resolve it as a jar file, and if so, adds any additional manifest classpaths. The returned collection of URLs will always contain all the input URLs.

        The returned URLs retains the input order.

        Returns:
        the collection of URLs, not null
      • tryToGetValidUrl

        static java.net.URL tryToGetValidUrl​(java.lang.String workingDir,
                                             java.lang.String path,
                                             java.lang.String filename)
      • cleanPath

        public static java.lang.String cleanPath​(java.net.URL url)
        Cleans the URL.
        Parameters:
        url - the URL to clean, not null
        Returns:
        the path, not null
      • resourceName

        private static java.lang.String resourceName​(java.lang.String name)
      • distinctUrls

        private static java.util.Collection<java.net.URL> distinctUrls​(java.util.Collection<java.net.URL> urls)