【问题标题】:Update files insite Jar file更新 Jar 文件中的文件
【发布时间】:2018-08-24 19:45:25
【问题描述】:

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

问题是这个Jar里面的语法老了,只支持Java的1.5版本。看了一圈,发现同一家公司发布的支持Java 1.8版本的语法,所以想用应用程序需要的两个更新文件来更新jar文件。

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

JarDir/foo/bar/Java.g

JarDir/foo/bar/JavaTreeParser.g

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

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

谁能帮我解决这个问题?

【问题讨论】:

    标签: java parsing jar


    【解决方案1】:

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

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

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

    jar -uf yourJarFile.jar com
    

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

    【讨论】:

    • 好吧,我用 7-zip 又做了一次,但它仍然无法正常工作。我的第一个猜测是它与应用程序本身有关。就像它的逻辑可能无法处理 1.5 plus Java 版本。但是错误输出实际上是来自 ANTLR 说 JavaTreeParser.g mismatched a tree node,所以我认为问题确实出在语法上。我的第二个想法是问题可能出在文件属性或其他东西上。在 7-zip 窗口中,参数从这个 (image.ibb.co/igJ58U/1.png) 更改为这个 (image.ibb.co/hwwNNp/2.png)。你对此有什么想法吗?
    • 嗯,看看7-zip,文件似乎更新了,但实际上我认为它们没有。使用 7-zip,我删除了 Java.gJavaTreeParser.g 中的所有内容(然后我检查了两个文件大小,结果都是 0)。然后,我使用这个“更新”的 Jar 测试了我的应用程序,它仍然可以解析代码,即使这两个文件是空的。要么有另一种语法被隐藏在某个地方(我严重怀疑),要么我在更新文件时做错了。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2010-12-12
      • 2017-12-02
      • 1970-01-01
      • 1970-01-01
      • 2019-07-03
      • 2019-01-31
      • 1970-01-01
      • 1970-01-01
      • 2015-10-25
      相关资源
      最近更新 更多