Pin*_*ain 8 java file-io jar executable-jar classloader
Hello Stack Overflow朋友.我有一个简单的问题,我担心没有一个简单的解决方案,我需要建议如何继续.我正在开发一个打包为可执行JAR的Java应用程序,但它需要在执行期间修改其一些JAR文件内容.在这个阶段我遇到了一个问题,因为一些操作系统锁定文件阻止写入它.
在应用程序退出时,用户必须看到jar文件的更新版本,尽管我可以非常灵活地了解如何实现这一点.清洁高效的解决方案显然是优先考虑的,但便携性是唯一的硬性要求.
以下是我可以看到解决问题的三种方法,可以随意评论或建议其他方法.
我知道这是一个奇怪的问题,但任何帮助将不胜感激.
一种选择:
让程序写入JAR 文件的修改副本。
在 JAR 文件中包含第二个 JAR,其中包含一个实用程序,该实用程序在执行时会删除原始 JAR 文件并重命名修改后的副本以与原始副本匹配。
当您的程序退出(并且已进行更改)时,提取该实用程序并在其自己的 JVM 中启动它(使用Runtime.getRuntime().exec()
)。该实用程序将等待锁定解除原始的、未修改的 JAR,然后执行其操作并退出。
对于用户来说,JAR 文件似乎在退出时更新(或者足够接近!)。