为了更好地理解 Java 中的工作原理,我想知道是否可以在运行时动态地将目录添加到类路径中。
例如,如果我启动一个.jar using “java -jar mycp.jar”并输出java.class.path财产,我可能会得到:
java.class.path: '.:/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java'
现在我可以在运行时修改这个类路径以添加另一个目录吗? (例如,在使用第一次调用类之前.jar位于我要添加的目录中)。
您可以使用以下方法:
URLClassLoader.addURL(URL url)
但是您需要通过反射来完成此操作,因为该方法是protected
:
public static void addPath(String s) throws Exception {
File f = new File(s);
URL u = f.toURL();
URLClassLoader urlClassLoader = (URLClassLoader) ClassLoader.getSystemClassLoader();
Class urlClass = URLClassLoader.class;
Method method = urlClass.getDeclaredMethod("addURL", new Class[]{URL.class});
method.setAccessible(true);
method.invoke(urlClassLoader, new Object[]{u});
}
请参阅 Java Trail反射 http://download.oracle.com/javase/tutorial/reflect/。尤其是这一段反射的缺点
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)