业务描述 : 有两个jar包mylib.jar,mylib2.jar , 其中mylib.jar依赖mylib2.jar
我在eclipse的classpath上不加载这两个jar包
但是我想要正常运行mylib.jar中的方法,并且该方法调用了mylib2.jar中的方法
实现:
<pre name="code" class="java">import java.io.File;
import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
public class Main {
public static void main(String[] args) throws MalformedURLException,
Exception {
URL url1 = new File("libs/mylib.jar").toURI().toURL();
URL url2 = new File("libs/mylib2.jar").toURI().toURL();
Main.class.getClassLoader().setDefaultAssertionStatus(true);
ClassLoader parent = Thread.currentThread().getContextClassLoader();
if (parent == null) {
parent = Main.class.getClassLoader();
if (parent == null) {
parent = ClassLoader.getSystemClassLoader();
}
}
URLClassLoader loader = new Loader(new URL[] { url1, url2 }, parent);
Thread.currentThread().setContextClassLoader(loader);
Class<?> classToLoad = Thread.currentThread().getContextClassLoader().loadClass("mypackage.Util");
Method method = classToLoad.getDeclaredMethod("sayHello");
method.invoke(null, new Object[0]);
}
static class Loader extends URLClassLoader {
public Loader(URL[] urls, ClassLoader parent) {
super(urls, parent);
}
@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
return super.findClass(name);
}
}
}