在运行时交换正在运行的jar

时间:2010-09-01 19:35:25

标签: java file plugins jar locking

我正在构建一个更新系统,我需要能够在运行时替换正在运行的应用程序jar的引用jar。但是,当我尝试在jar上执行文件实用程序功能(例如'setLastModified')时,我在Windows上遇到文件锁定问题。

经过一些谷歌搜索后,我找到了这个片段......

  

我在研究中发现的是   标准的ClassLoader   实现永远不会关闭jar   文件一旦打开。它也是   仅从jar文件加载资源   如所须。所以在任何特定的时间,   jar文件中可能有类   尚未加载到内存中的。   显然,如果删除jar文件   从ClassLoader下面出来,它   试图找到一个资源   丢失文件,你会得到一个   IOException至少。

是否有人提及有关此操作的信息,或解决此问题?

感谢。

3 个答案:

答案 0 :(得分:5)

有很多类/ lib热交换的解决方案:

这取决于你想做什么。

答案 1 :(得分:2)

最接近的是OSGi

请查看上述关于混凝土产品的artice的“另请参见”部分。

答案 2 :(得分:0)

我不知道有什么好方法可以解决这个问题。创建一个自定义类加载器可能是一个选项,虽然我不喜欢这个想法..

我们通过在启动主应用程序之前从单独的jar运行更新程序来解决它。这很好用,但很明显,你只能在启动应用程序时更新jar。