更新 jar 中的 .class 文件

Posted

技术标签:

【中文标题】更新 jar 中的 .class 文件【英文标题】:Updating .class file in jar 【发布时间】:2010-12-12 15:14:48 【问题描述】:

我想用一个新的更新 jar 中的 .class 文件。最简单的方法是什么,尤其是在 Eclipse IDE 中?

【问题讨论】:

【参考方案1】:

This tutorial详细说明如何更新jar文件

jar -uf jar-file <optional_folder_structure>/input-file(s)     

其中“u”表示更新。

【讨论】:

在此命令中: u 选项表示您要更新现有的 JAR 文件。 f 选项表示要更新的 JAR 文件是在命令行中指定的。 jar-file 是要更新的现有 JAR 文件。 input-file(s) 是您要添加到 Jar 文件中的一个或多个文件的空格分隔列表。 我想更新一个属性文件到一个特定的位置,理想情况下应该有两个参数sourcedestination。对我来说input-file(s),但source 在哪里? @ShashiRanjan 你找到解决方案了吗?? @Dinesh 我使用了“zip -u /var/opt/my-jar-with-dependencies.jar properties/my_app.properties”。基本上是“zip -u ”,其中dest是相对于jar提取文件夹的。 非常感谢@ShashiRanjan【参考方案2】:

你想自动还是手动?如果手动,JAR 文件实际上只是一个 ZIP 文件,因此您应该能够使用任何 ZIP 阅读器打开它。 (您可能需要先更改扩展名。)如果您想通过 Eclipse 自动更新 JAR 文件,您可能需要查看 Eclipse 中的Ant 支持并查看zip task。

【讨论】:

【参考方案3】:

只需使用7-Zip 或 Winzip 将新类文件拖放到 JAR 中。您甚至可以使用父文件夹图标修改包含在 WAR 文件中的 JAR 文件,并在 7zip 检测到内部文件已被修改时单击确定

【讨论】:

使用 WinZip 时,您必须先启动 WinZip 打开它,然后将 jar 文件拖到 WinZip 窗口中。 Windows 上的 7z 不考虑大小写,即它将同时替换 CA.class 和 Ca.class【参考方案4】:
    使用jar -xvf 将文件解压到一个目录中。 进行更改并替换类。 使用jar -cvf 创建一个新的jar 文件。

【讨论】:

【参考方案5】:

Jar 是一个存档,您可以在自己喜欢的文件管理器(例如 Total Commander)中自己替换其中的文件。

【讨论】:

【参考方案6】:

JAR 文件只是变相的 .zip。压缩文件夹包含.class 文件。

如果您使用的是 macOS:

    重命名文件以拥有“.zip”扩展名。例如myJar.jar -> myJar.zip。 解压缩“.zip”(双击它)。将出现一个名为“myJar”的新文件夹 查找 .class 文件并将其替换为新的 .class 文件。 选择文件夹“myJar”的所有内容并选择“压缩 x 项”。 不要压缩文件夹本身,只压缩其内容

其他 - 在 macOS 上参考原始 jar 编译单个 .class 文件

    创建一个 myClass.java 文件,其中包含您的代码。 从 Spotlight 打开终端。 javac -classpath originalJar.jar myClass.java 这将创建名为 myClass.class 的编译类。

从这里开始,按照上述步骤操作。您也可以使用 Eclipse 来编译它,只需通过右键单击项目“构建路径”->“添加外部档案”来引用原始 jar。从这里您应该能够将其编译为 jar,并使用上面的 zip 技术从 jar 中检索类。

【讨论】:

【参考方案7】:

在 jar 中编辑 properties/my_app.properties 文件:

"zip -u /var/opt/my-jar-with-dependencies.jar properties/my_app.properties"。基本上是"zip -u &lt;source&gt; &lt;dest&gt;",其中 dest 是相对于 jar 提取文件夹。

【讨论】:

【参考方案8】:

1) 您可以将文件解压缩到一个名为

的文件夹中

jarname.jar

然后替换文件夹中的文件,如果您在调试时经常更新类,会很方便

2)你可以提取jar替换文件然后再将jar重新启动

3) 打开带有 7 zip 的 jar 并将您的新类拖放到其中以复制旧类

【讨论】:

【参考方案9】:

您可以在线找到任何 .jar 文件的源代码,在您的 IDE 中导入相同的项目并进行基本设置。在 .java 文件中进行必要的更改并为 .class 文件编译它。

编译完成后,需要解压jar文件,将旧的.class文件替换为新的。

并使用以下命令重建 .jar 文件

jar cf test.jar *

注意:我已经在我们的项目中做了很多次这个更改,希望你会发现它有用。

【讨论】:

【参考方案10】:

高级步骤:

Setup the environment
Use JD-GUI to peek into the JAR file
Unpack the JAR file
Modify the .class file with a Java Bytecode Editor
Update the modified classes into existing JAR file
Verify it with JD-GUI

详细步骤和方法请参考以下链接,

https://www.talksinfo.com/how-to-edit-class-file-from-a-jar/

【讨论】:

【参考方案11】:

另一种方法是不替换 jar 文件中的 .class 文件。而是将其放入一个新的 jar 文件中,并确保它出现在您的类路径中比原始 jar 文件更早。

我不确定我是否会推荐这个用于生产软件,但对于开发来说它既快速又简单。

【讨论】:

以上是关于更新 jar 中的 .class 文件的主要内容,如果未能解决你的问题,请参考以下文章

怎么修改jar包中的class文件然

怎么替换指定jar中的class文件

怎么修改jar包中的class文件然后再重新打成jar包

项目中的jar包怎么打开查看具体的class文件内容

如何修改jar包里面的.class文件

怎么修改jar包中的class文件然后再重新打成jar包