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

cwe*_*ton 5 java plugins locking jar file

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

经过一些谷歌搜索我发现这个片段...

我在研究中发现,标准的ClassLoader实现一旦打开就永远不会关闭它.它还只根据需要从jar文件中加载资源.因此,在任何特定时间,jar文件中可能存在尚未加载到内存中的类.显然,如果你从ClassLoader下删除jar文件,并且它试图在丢失的文件中找到一个资源,那么你至少会得到一个IOException.

有没有人提到有关这样做的信息,或解决这个问题?

谢谢.

Col*_*ert 6

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

这取决于你想做什么.

  • OSGi非常庞大,JRebel仅用于开发,因为它需要昂贵的许可证(OSS项目免费).不确定Hotswap for ant (2认同)