我正在构建一个更新系统,我需要能够在运行时替换正在运行的应用程序jar的引用jar。但是,当我尝试在jar上执行文件实用程序函数(例如'setLastModified')时,我遇到了Windows上的文件锁定问题。在运行时交换运行的jar
一些谷歌上搜索,我发现这个片段后...
我在研究中发现,那是什么 标准的ClassLoader 实施从未关闭一个jar文件 一旦被打开。它也 只根据需要从jar文件 加载资源。因此在任何特定时间, 可能存在尚未加载到内存中的jar文件 中的类。 显然,如果您从ClassLoader下删除了jar文件 ,并且它 试图在 缺少的文件中查找资源,那么至少会得到一个012xxIOException。
有没有人有任何提及这方面的信息或解决此问题?
谢谢。
你需要重新发明轮子吗? OSGi已经有了热门的部署。看一看,看看你是否可以用它来代替。 – SteveD 2010-09-01 19:41:27
OSGi听起来像绝大多数要求压倒一切,看看这个答案http://stackoverflow.com/a/2463978/320594 – 2014-03-08 09:20:28
重新阅读后,似乎你想保持你的应用程序运行,但与新的罐子......所以OSGi真的看起来像一个很好的解决方案:),例如Eclipse允许(插件在运行时重新加载)并使用OSGi(只要我知道)。 – 2014-03-08 09:23:31