我正在构建一个更新系统,我需要能够在运行时替换正在运行的应用程序jar的引用jar。但是,当我尝试在jar上执行文件实用程序功能(例如'setLastModified')时,我在Windows上遇到文件锁定问题。
经过一些谷歌搜索后,我找到了这个片段......
我在研究中发现的是 标准的ClassLoader 实现永远不会关闭jar 文件一旦打开。它也是 仅从jar文件加载资源 如所须。所以在任何特定的时间, jar文件中可能有类 尚未加载到内存中的。 显然,如果删除jar文件 从ClassLoader下面出来,它 试图找到一个资源 丢失文件,你会得到一个 IOException至少。
是否有人提及有关此操作的信息,或解决此问题?
感谢。
答案 0 :(得分:5)
答案 1 :(得分:2)
最接近的是OSGi
请查看上述关于混凝土产品的artice的“另请参见”部分。
答案 2 :(得分:0)
我不知道有什么好方法可以解决这个问题。创建一个自定义类加载器可能是一个选项,虽然我不喜欢这个想法..
我们通过在启动主应用程序之前从单独的jar运行更新程序来解决它。这很好用,但很明显,你只能在启动应用程序时更新jar。