【问题标题】:How to delete a executing jar file如何删除正在执行的jar文件
【发布时间】:2023-03-17 06:04:02
【问题描述】:

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

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

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

我为申请做了: http://java.net/projects_tags/jeazyprops

【问题讨论】:

  • 您能否更改应用程序以从其他位置加载属性文件,还是必须在 JAR 中?
  • 当它在不同的位置时我可以改变它。没问题...但是我必须将jar中的属性文件的项目扩展为...

标签: java swing reflection file-io jar


【解决方案1】:

你的问题是 pre-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

【讨论】:

    【解决方案2】:

    您可能需要编写一个自定义类加载器(扩展类加载器),使您能够加载/卸载 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?

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2023-03-11
        • 1970-01-01
        • 2018-04-11
        • 2014-12-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-07
        • 1970-01-01
        相关资源
        最近更新 更多