基本上,我有一个Jar文件,该文件能够解析Java文件,并根据解析后的值进行一些计算。
问题在于此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之后,它的工作方式似乎与更新之前一样。例如,由于diamond运算符是Java 7的附加功能,因此它仍然无法解析此ArrayList<String> s = new ArrayList<>();
。
现在我正在考虑像this answer那样使用jar uf
,但我不知道如何指定要插入Jar中的路径。
有人可以帮我吗?
答案 0 :(得分: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检查您的工作,以查看文件已更改。
答案 1 :(得分:0)
在分析了Jar文件一段时间后,我意识到代码中没有使用Java.g
和JavaTreeParser.g
。它们用于生成一些Java文件和一些.token
文件。这些是应用程序正在使用的文件。