看看我在google上找到的代码,它应该解释如何动态加载jar:
import java.io.File;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
/**
* @author Thomas.Darimont
*/
public class DynamicClasspathExtensionExample {
/**
* @param args
*/
public static void main(String[] args) {
try {
Class.forName("com.google.inject.Injector");
System.out.println("Found");
} catch (ClassNotFoundException e) {
System.out.println(e.getMessage() + " not found...");
}
addJarsToClassPath(Thread.currentThread().getContextClassLoader(), new File[]{new File("D:/stuff/google/guice/1.0/guice-1.0.jar")});
try {
Class.forName("com.google.inject.Injector");
System.out.println("Found");
} catch (ClassNotFoundException e) {
System.out.println(e.getMessage() + " not found...");
}
}
private static void addJarsToClassPath(File... jars) {
addJarsToClassPath(Thread.currentThread().getContextClassLoader(), jars);
}
private static void addJarsToClassPath(ClassLoader classLoader, File... jars) {
if (classLoader instanceof URLClassLoader) {
try {
Method addUrlMethod = URLClassLoader.class.getDeclaredMethod("addURL", new Class[] { URL.class });
addUrlMethod.setAccessible(true);
if (null != addUrlMethod) {
for (File jar : jars) {
try {
addUrlMethod.invoke(classLoader, jar.toURI().toURL());
} catch (Exception e) {
e.printStackTrace();
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}编辑:
所以你可以加载jar:
addJarsToClassPath(Thread.currentThread().getContextClassLoader(), new File(System.getenv("XYZ_LIB_PATH"), "library.jar"));