繁体   English   中英

如何在运行时从类路径中删除jar文件?

[英]How to remove jar file from classpath during runtime?

我有一个Apache Commons库(commons-io.jar)添加到我的项目类路径中,我想在运行时从我的类路径中删除该库类,然后在完成一些工作后再添加。

有什么方法可以在运行时从类路径中删除所有类,并在某些操作后添加这些类?

public static void main(String [] args){

    //Some apache commons operations

    //Remove apache commons classes from classpath

    doSomeWork();

    //Add apache commons classes to classpath

}

您可以在pom中使用maven-enforcer-plugin强制传递依赖的特定版本。 Java Maven项目中的库版本冲突

您遇到的问题称为类路径hell

Java中没有此类功能。 这背后的原因是类加载器的设计,它只能加载类而不能卸载它们。 很有可能,即使在将来也不会发生这种情况。

您可以使用特殊的类加载器从不同的jar加载不同的类,但是即使这样,您也会很快陷入其他限制。 例如, 仅当父类尚未加载类时类加载器才应加载该类 这意味着代码的其他部分不能使用apache-commons.jar。 您可以将程序分为两个部分,每个部分都在其自己的类加载器/类路径中运行,但是您将意识到不能再在它们之间共享对象 等等。

最后,您可以(a)尝试找到可以同时使用两者的jar的组合,(b)修复程序的一部分,使其可以与另一jar一起使用,或者(c)将程序分为两部分并且每个都在单独的JVM中运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM