如何删除正在执行的jar文件

时间:2012-10-05 17:11:39

标签: java swing reflection file-io jar

我创建了一个应用程序,在该应用程序中,它根据操作修改了jar中的属性文件。

我可以使用更新的更改创建一个新的临时jar。但是无法将jar文件重命名为现有的jar文件名。由于它正在运行,我无法删除并重命名它。

任何人都可以建议删除jar(当前执行)的任何操作或建议,并将temp jar重命名为该名称吗?

我为申请做了以下事情:         http://java.net/projects_tags/jeazyprops

3 个答案:

答案 0 :(得分:3)

你的问题是java 1.7之前使用的默认ClassLoader - 它会锁定它加载的任何jar,并且在执行完成之前不会释放jar。最简单的解决方案是使用Java 1.7来解决这个问题。否则你可以编写自己的自定义ClassLoader(呃)。默认ClassLoaderhttp://docs.oracle.com/javase/6/docs/api/java/net/URLClassLoader.html

修改

以下是Oracle的说明,他们在Java 1.7中修复了它:http://openjdk.java.net/projects/jdk7/features/#f584

答案 1 :(得分:1)

可能你需要编写一个自定义类加载器(扩展ClassLoader),它允许你加载/卸载jar。如果你可以卸载jar,你应该可以删除jar。

有用的链接 http://docs.oracle.com/javase/tutorial/deployment/jar/jarclassloader.html

Can I dynamically unload and reload (other versions of the same) JAR?

答案 2 :(得分:1)

我没有看到在程序中替换正在执行的jar的可能性。
建议的方法。
使用只需启动现有应用程序的简单类创建一个新jar。在启动之前,应检查temp.jar是否存在以及是否存在删除原始文件并将temp.jar重命名为原始文件。在创建temp.jar后的应用程序中,使用Runtime.exec启动发射器类并退出。您的应用将使用新jar启动。