package org.gradle; import java.net.URISyntaxException; import java.net.URL; import java.net.URLClassLoader; import static junit.framework.Assert.assertEquals; /** * A custom ClassLoader that redefines the custom agent and the tests, to verify that they are * loaded via the custom system ClassLoader. */ public class MySystemClassLoader extends URLClassLoader { public MySystemClassLoader(ClassLoader parent) throws URISyntaxException, ClassNotFoundException { super(new URL[0], parent); // Should be constructed with the default system ClassLoader as root assertEquals(getClass().getClassLoader(), parent); addClasspathFor("org.gradle.MyAgent"); addClasspathFor("org.gradle.JUnitTest"); } private void addClasspathFor(String name) throws ClassNotFoundException { URL codebase = getParent().loadClass(name).getProtectionDomain().getCodeSource().getLocation(); addURL(codebase); } @Override public Class<?> loadClass(String className) throws ClassNotFoundException { if (className.equals(getClass().getName())) { return getClass(); } try { return findClass(className); } catch (ClassNotFoundException e) { return super.loadClass(className); } } }