在现场 Jar 文件中更新文件



基本上我有一个能够解析Java文件的Jar文件,并根据解析的值进行一些计算。

问题是这个 Jar 中的语法很旧,只支持 Java 的 1.5 版本。我环顾四周,找到了由同一家公司发布的支持 Java 版本 1.8 的语法,因此我想使用应用程序所需的两个更新文件更新 Jar 文件。

使用 JD-GUI 分析 Jar 文件,我可以看到这是我要更新的两个文件的位置:

JarDir/foo/bar/Java.g
JarDir/foo/bar/JavaTreeParser.g

首先,我遵循了这个建议,并尝试使用 7-zip 来编辑这两个文件。我基本上用7-zip打开了Jar文件,找到了文件并编辑了它们的内容。尝试"更新"的 Jar 后,它似乎就像更新之前一样工作。例如,它仍然无法解析此ArrayList<String> s = new ArrayList<>();,因为菱形运算符是Java 7的附加内容。

现在我正在考虑使用jar uf,就像这个答案建议的那样,但我不知道如何指定我要插入 Jar 的路径。

谁能帮我一把?

7-zip 解决方案应该有效。 我已经做过很多次了。 检查你的数学...

您应该能够做一个jar -tvf xxx.jar在使用7-zip编辑以验证它是否已更改后。 注意文件大小和日期,看看你实际上已经改变了你想要的内容。

使用 jar uf(或 -uf(相当简单。 例如,如果要更新com.foo.bar.class,则需要创建一个空的目录结构,其中包含一个包含bar.class的foo目录的com目录。 然后从包含 com 目录的目录中运行:

jar -uf yourJarFile.jar com

同样,通过执行 jar -tvf 检查您的工作以查看文件是否已更改。

在分析了一段时间的 Jar 文件后,我意识到代码中没有使用Java.gJavaTreeParser.g。它们用于生成一些Java文件和一些.token文件。这些是应用程序正在使用的文件。

最新更新