Java URLClassLoader动态加载jar包
Jdk1.2开始有一个URLClassLoader类加载器。该类加载器用于从指向 JAR 文件和目录的 URL 的搜索路径加载类和资源。这里假定任何以 ‘/’ 结束的 URL 都是指向目录的。如果不是以该字符结束,则认为该 URL 指向一个将根据需要打开的 JAR 文件
package com.javaweb.user.test;
import java.io.File;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
public class UrlTest {
public static void main(String[] args) {
try {
URL url = new File("c:/Url.jar").toURI().toURL();
URLClassLoader ucl = new URLClassLoader(new URL[]{url});
Class<?> c = Class.forName("org.javaweb.url.Url",true,ucl);
Method[] m = c.getDeclaredMethods();
for(Method method:m ){
method.setAccessible(true);
if("test".equals(method.getName())){
method.invoke(ucl, new Object[]{});
}
System.out.println(method.getName());
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
Url.jar内容:
package org.javaweb.url;
public class Url {
public static void test(){
System.out.println("I'm void.");
}
}
输出内容:
I'm void. test