当前位置: 首页 > 面试题库 >

修改执行的Jar文件

柴宏浚
2023-03-14
问题内容

你好堆栈溢出的朋友。我有一个简单的问题,我担心没有简单的解决方案,我需要有关如何进行的建议。我正在开发一个打包为可执行JAR的Java应用程序,但它需要在执行过程中修改其某些JAR文件内容。在此阶段,我遇到了问题,因为某些操作系统锁定了文件,从而阻止了对该文件的写入。

用户必须在应用程序退出时看到jar文件的更新版本,这一点非常重要,尽管我可以非常灵活地实现这一目标。干净,高效的解决方案显然是可取的,但可移植性是唯一的硬性要求。

以下是我可以看到的三种解决问题的方法,可以随时对其发表评论或提出建议。

  1. 告诉Java解锁JAR文件以进行写入(这似乎不可能,但这将是最简单的解决方案)
  2. 在应用程序启动时将可执行的类文件复制到临时文件,使用类加载器加载这些文件并从初始JAR文件中卸载这些文件。(虽然对类加载器没有太多的经验,但希望JVM足够聪明,可以实现原来的JAR已不再使用,因此请对其进行解锁)
  3. 将第二个可执行JAR文件放入第一个可执行文件中,启动时将内部jar提取到e临时文件中,使用复制的内部JAR调用新的Java进程并将其传递给外部JAR的位置,第一个进程退出,第二个进程修改外部JAR (这可以工作,但是我不确定一个Java应用程序调用另一个平台的平台独立方式)

我知道这是一个奇怪的问题,但是任何帮助都将不胜感激。


问题答案:

一种选择:

让程序编写JAR文件的修改后的 副本

在JAR文件中包含具有实用程序的第二个JAR,该实用程序在执行时会删除原始JAR文件,并重命名修改后的副本以匹配原始副本。

当您的程序退出(并进行了更改)时,请提取该实用程序并在其自己的JVM中启动(使用Runtime.getRuntime().exec())。该实用程序将等待锁脱离原始的,未修改的JAR,然后开始其业务并退出。

对用户而言,JAR文件似乎在退出时会更新(或足够接近!)。



 类似资料:
  • 问题内容: 我想修改jar中的文件。是否可以在我的应用程序中执行此操作而无需提取并重新创建? 我要修改的文件是配置文件,主要是基于xml的文件。 我感兴趣的原因是,如果我将其解压缩,则无法再次创建.exe文件。 问题答案: 我想修改中的文件。是否可以在我的应用程序中执行此操作而无需提取并重新创建? 我要修改的文件是配置文件,主要是基于的文件。 我感兴趣的原因是,如果我将其解压缩,则你可以将u选项用

  • 问题内容: 我有一个jar文件,它在html文件中用作applet。我想修改jar文件的内容并重建jar文件,以便html与新的jar文件配合使用。我怎样才能做到这一点?? 我已经尝试使用7zip解压缩,并修改了源代码并创建了新的jar。但是当我在html中使用它时会显示一些java.lang.Classnotfound错误 问题答案: 您可以根据需要解压缩或重新解压缩类和源文件。 解开 罐 ht

  • 问题内容: 我试图弄清楚如何引用python文件,以便可以在Java GUI Jar中执行它。它必须是一个可移植的解决方案,因此使用绝对路径对我不起作用。我在下面列出了我的项目结构,并包括了有关如何尝试执行python脚本的代码。感谢您提供的任何帮助! 问题答案: 使用开头的文件路径意味着您要从文件系统的根目录开始。 您的代码为我工作,只需删除该斜杠即可: 放置错误文件没有显示错误的原因是因为此J

  • 我提取了一个包含xml、java类等的可执行jar文件。实际上,这个可执行jar文件是一个具有依赖关系的库。我需要修改这个库中一个类文件中的一行代码。我已经成功地编辑了类文件,现在我想把它重新打包到可执行的jar中。如何做到这一点。