在运行时替换jar时发生ClassNotFoundException

时间:2013-01-15 13:20:11

标签: java classloader

我运行一个打包在A.jar中的java应用程序,其中使用了B.jar中的一些类。

所有相关的jar都放在一个特定的目录中,该目录包含在类路径中。

程序是这样的:

main(){

    run method ClassA.M1() in A.jar;  //the method may keep running for 2 minutes

    do some other prepare;

    call method ClassB.M2 in B.jar;

}

当程序运行M1时,我用新版本手动替换了B.jar(名称也是B.jar)。

但是,该程序抛出ClassNotFoundException。

然后,再次启动程序,它运行正常。

所以,我的问题是:为什么抛出ClassNotFoundException,因为jar路径和jar名称没有改变,类加载器应该加载它而没有任何麻烦。

请给我一些指示。

1 个答案:

答案 0 :(得分:1)

您不能简单地在运行时更改jar文件,方法是将它们替换为具有相同名称的jar文件,因为类加载器可能已经从中加载了一些类。

如果您需要支持此类行为,则需要查看将提供热替换机制的库或框架。

以下两篇文章可以帮助您更好地理解类加载器:

关于这个主题还有更多的文章,甚至关于Stack OverFlow的相关问题,我建议你阅读更多。