Class ParallelWorldClassLoader

  • All Implemented Interfaces:
    Closeable, AutoCloseable

    public class ParallelWorldClassLoader
    extends ClassLoader
    implements Closeable
    Load classes/resources from a side folder, so that classes of the same package can live in a single jar file.

    For example, with the following jar file:

      /
      +- foo
         +- X.class
      +- bar
         +- X.class
     

    ParallelWorldClassLoader("foo/") would load X.class from /foo/X.class (note that X is defined in the root package, not foo.X.

    This can be combined with MaskingClassLoader to mask classes which are loaded by the parent class loader so that the child class loader classes living in different folders are loaded before the parent class loader loads classes living the jar file publicly visible For example, with the following jar file:

      /
      +- foo
         +- X.class
      +- bar
         +-foo
            +- X.class
     

    ParallelWorldClassLoader(MaskingClassLoader.class.getClassLoader()) would load foo.X.class from /bar/foo.X.class not the foo.X.class in the publicly visible place in the jar file, thus masking the parent classLoader from loading the class from foo.X.class (note that X is defined in the package foo, not bar.foo.X.

    Author:
    Kohsuke Kawaguchi