3

我创建了一个应用程序,其中基于操作,它修改 jar 内的属性文件。

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

任何人都可以提出任何操作或建议来删除 jar(当前正在执行)并将临时 jar 重命名为该名称吗?

我为应用程序做了:http: //java.net/projects_tags/jeazyprops

4

3 回答 3

3

你的问题是ClassLoaderpre-java 1.7 使用的默认值 - 它锁定它加载的任何 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

于 2012-10-05T18:03:28.293 回答
1

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

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

我可以动态卸载和重新加载(相同的其他版本)JAR 吗?

于 2012-10-05T18:00:45.937 回答
1

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

于 2012-10-05T18:03:33.887 回答