可能的重复:Setting CLASSPATH during runtime
获取我正在使用的类路径:
ClassLoader cl = ClassLoader.getSystemClassLoader();
URL[] urls = ((URLClassLoader)cl).getURLs();
for(URL url: urls){
System.out.println("classpath:"+url.getFile());
}
有人可以帮助我使用代码在运行时在类路径中加载jar。
ClassLoader currentThreadClassLoader
= Thread.currentThread().getContextClassLoader();
URLClassLoader urlClassLoader
= new URLClassLoader(new URL[]{new File("D:\\ms.jar").toURL()},
currentThreadClassLoader);
Thread.currentThread().setContextClassLoader(urlClassLoader);
这种情况似乎有效。
答案 0 :(得分:1)
完整的(编码)解决方案将超出单个Stack Overflow答案,因此,如果您决定编写自己的ClassLoader,我将概述您需要注意的要点:
注意:在您的程序的某个包装器脚本/批处理文件中使用-cp
开关更容易远。
答案 1 :(得分:0)
来自ClassLoader#getSystemClassLoader()
doc:
首先在运行时的启动序列中调用此方法, 此时它会创建系统类加载器并将其设置为 调用Thread的上下文类加载器。
当您执行Thread.currentThread().setContextClassLoader(urlClassLoader)
时,您正在更改当前线程中的引用,而不是ClassLoader
中的引用(并且您无法更改此引用),因此从那时起您应该依赖在当前线程的新类加载器上加载类,如:
Thread.currentThread().getContextClassLoader().loadClass(...)