实现java classloader 动态加载jar包

业务描述 : 有两个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);
		}

	}
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值