Hello Stack Overflow朋友。我有一个简单的问题,我担心没有一个简单的解决方案,我需要建议如何继续。我正在开发一个打包为可执行JAR的Java应用程序,但它需要在执行期间修改其一些JAR文件内容。在这个阶段我遇到了一个问题,因为一些操作系统锁定文件阻止写入它。
在应用程序退出时,用户必须看到jar文件的更新版本,尽管我可以非常灵活地了解如何实现这一点。清洁高效的解决方案显然是优先考虑的,但便携性是唯一的硬性要求。
以下是我可以看到解决问题的三种方法,可以随意评论或建议其他方法。
我知道这是一个奇怪的问题,但任何帮助都会受到赞赏。
答案 0 :(得分:2)
一个选项:
让程序编写JAR文件的修改后的副本。
在JAR文件中包含第二个带有实用程序的JAR,该实用程序在执行时会删除原始JAR文件并重命名修改后的副本以匹配原始文件。
当您的程序退出(并进行了更改)时,提取此实用程序并在其自己的JVM中启动它(使用Runtime.getRuntime().exec()
)。该实用程序将等待锁定从原始的,未修改的JAR开始,然后执行其业务并退出。
对于用户来说,JAR文件似乎在退出时更新(或足够接近!)。
答案 1 :(得分:1)
老实说,我认为你的做法是错误的。这根本不适合部署java的默认方式。您修改过的文件只需要保存到某个地方的db或xml文件 - 这是唯一合理的方法。
任何事情都只是“与风作斗争” - 你可能会有些努力让它发挥作用,但它最终会咬你或顾客。