我有一个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
}
答案 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中运行。