Class ParallelWorldClassLoader

java.lang.Object
java.lang.ClassLoader
com.sun.istack.tools.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