如何从java在运行时设置类路径
可能重复:如何从java在运行时设置类路径,java,Java,可能重复: 可能重复: 要获取我正在使用的类路径,请执行以下操作: ClassLoader cl = ClassLoader.getSystemClassLoader(); URL[] urls = ((URLClassLoader)cl).getURLs(); for(URL url: urls){ System.out.println("classpath:"+url.getFile()); } 有人能帮我在运行时在类路径中加载J
可能重复: 要获取我正在使用的类路径,请执行以下操作:
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);
这似乎是可行的。一个完整的(编码的)解决方案将有点超出单堆栈溢出的答案,因此,如果您决定编写自己的类加载器,我将概述您需要注意的要点:
-cp
开关,就更容易了。来自文档:
此方法首先在运行时启动序列的早期调用,
此时它创建系统类加载器并将其设置为
调用线程的上下文类加载器
当您执行Thread.currentThread().setContextClassLoader(urlClassLoader)
时,您正在更改当前线程中的引用,而不是ClassLoader
中的引用(并且您无法更改此引用),因此从那时起,您应该依靠当前线程的新类加载器来加载类,例如:
Thread.currentThread().getContextClassLoader().loadClass(...)
在应用程序启动之前适当地设置类路径,并使JAR成为其中的一部分。我看不出这是不够的理由。JAR的运行时加载是针对应用程序服务器的,而不是针对你和我。如果我开发一个应用程序,一次加载插件,将使用建议的机制,类路径可能很重要,可能会重复:“这似乎很有效。”。例外情况?@Alban虽然不是1:1的副本,但这绝对是他“谷歌搜索”时应该找到的答案。