如何卸载Java标准库

3

是否可以卸载Java标准库——即在java.*包中定义的那些库?

我的应用程序需要运行JUnit测试,每个测试都有自己的ClassLoader,就像这样:

for(String testClass : testClasses) {
    CustomClassLoader cl = new CustomClassLoader(this.getClass().getClassLoader());
    Class<?> _class = cl.loadClass(testClass);
    JUnitCore junit = new JUnitCore();
    Result result = junit.run( _class );
    registerResult(result, cl);
}

我遇到的问题是一些类没有被卸载,包括java.*类。

如果我不卸载它们,那么如果测试类使用静态方法存储对象,例如java.security.Security类提供的方法,那么会出现ClassCastException错误。

有什么办法可以强制卸载它们吗?


标准的Java类通常由您的CustomClassLoader的父类加载器(一次)加载。因此,我实际上不理解卸载它们的要求... - Andreas Dolk
@Andreas_D 因为测试运行之间可以共享静态全局值,比如单例。 - aperez
2个回答

3

0

当然,无法卸载系统类。我认为你可能遗漏了某些东西。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接