Package org.codehaus.groovy.tools
Class RootLoader
java.lang.Object
java.lang.ClassLoader
java.security.SecureClassLoader
java.net.URLClassLoader
org.codehaus.groovy.tools.RootLoader
- All Implemented Interfaces:
java.io.Closeable
,java.lang.AutoCloseable
public class RootLoader
extends java.net.URLClassLoader
This ClassLoader should be used as root of class loaders. Any
RootLoader does have its own classpath. When searching for a
class or resource this classpath will be used. Parent
Classloaders are ignored first. If a class or resource
can't be found in the classpath of the RootLoader, then parent is
checked.
Note: this is very against the normal behavior of classloaders. Normal is to first check parent and then look in the resources you gave this classloader.
It's possible to add urls to the classpath at runtime through addURL(URL)
.
Why using RootLoader? If you have to load classes with multiple classloaders and a classloader does know a class which depends on a class only a child of this loader does know, then you won't be able to load the class. To load the class the child is not allowed to redirect its search for the class to the parent first. That way the child can load the class. If the child does not have all classes to do this, this fails of course.
For example:
parentLoader (has classpath: a.jar;c.jar) | | childLoader (has classpath: a.jar;b.jar;c.jar)class C (from c.jar) extends B (from b.jar) childLoader.find("C")
--> parentLoader does know C.class, try to load it --> to load C.class it has to load B.class --> parentLoader is unable to find B.class in a.jar or c.jar --> NoClassDefFoundException!if childLoader had tried to load the class by itself, there would be no problem. Changing childLoader to be a RootLoader instance will solve that problem.
-
Constructor Summary
Constructors Constructor Description RootLoader(java.lang.ClassLoader parent)
constructs a new RootLoader without classpathRootLoader(java.net.URL[] urls, java.lang.ClassLoader parent)
constructs a new RootLoader with a parent loader and an array of URLs as classpathRootLoader(LoaderConfiguration lc)
constructs a new RootLoader with aLoaderConfiguration
object which holds the classpath -
Method Summary
Modifier and Type Method Description void
addURL(java.net.URL url)
adds an url to the classpath of this classloaderprotected java.lang.Class
findClass(java.lang.String name)
java.net.URL
getResource(java.lang.String name)
returns the URL of a resource, or null if it is not foundprotected java.lang.Class
loadClass(java.lang.String name, boolean resolve)
loads a class using the name of the classMethods inherited from class java.net.URLClassLoader
close, definePackage, findResource, findResources, getPermissions, getResourceAsStream, getURLs, newInstance, newInstance
Methods inherited from class java.security.SecureClassLoader
defineClass, defineClass
Methods inherited from class java.lang.ClassLoader
clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findClass, findLibrary, findLoadedClass, findResource, findSystemClass, getClassLoadingLock, getDefinedPackage, getDefinedPackages, getName, getPackage, getPackages, getParent, getPlatformClassLoader, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, getUnnamedModule, isRegisteredAsParallelCapable, loadClass, registerAsParallelCapable, resolveClass, resources, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Constructor Details
-
RootLoader
public RootLoader(java.lang.ClassLoader parent)constructs a new RootLoader without classpath- Parameters:
parent
- the parent Loader
-
RootLoader
public RootLoader(java.net.URL[] urls, java.lang.ClassLoader parent)constructs a new RootLoader with a parent loader and an array of URLs as classpath -
RootLoader
constructs a new RootLoader with aLoaderConfiguration
object which holds the classpath
-
-
Method Details
-
loadClass
protected java.lang.Class loadClass(java.lang.String name, boolean resolve) throws java.lang.ClassNotFoundExceptionloads a class using the name of the class- Overrides:
loadClass
in classjava.lang.ClassLoader
- Throws:
java.lang.ClassNotFoundException
-
getResource
public java.net.URL getResource(java.lang.String name)returns the URL of a resource, or null if it is not found- Overrides:
getResource
in classjava.lang.ClassLoader
-
addURL
public void addURL(java.net.URL url)adds an url to the classpath of this classloader- Overrides:
addURL
in classjava.net.URLClassLoader
-
findClass
protected java.lang.Class findClass(java.lang.String name) throws java.lang.ClassNotFoundException- Overrides:
findClass
in classjava.net.URLClassLoader
- Throws:
java.lang.ClassNotFoundException
-