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

时间:2017-11-13 07:33:45

标签: java classpath

我有一个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

}

2 个答案:

答案 0 :(得分:-1)

您可以在pom中使用maven-enforcer-plugin来强制传递依赖项的特定版本。 Conflicting library version in a java maven project

答案 1 :(得分:-1)

您遇到的问题称为 classpath hell

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

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

最后,您可以(a)尝试找到适用于两者的罐子组合,(b)修复程序的一部分,使其与另一个罐子一起使用,或者(c)打破程序分为两部分,每部分都在不同的JVM中运行。