比较两个.jar文件

Kun*_*nal 91 java comparison diff jar

如何比较两个.jar文件?它们都有编译的.class文件.

我希望在方法变化等方面有所不同.

lin*_*ild 90

  • 由于他们的报告生成,+1到pkgdiff (16认同)
  • 请注意Japi-Compliance-Checker和Pkgdiff都没有比较一切.例如,忽略所有方法实现.仅生成方法签名,方法删除和API兼容性作为报告.如果您要比较二进制文件,那么您可以选择使用diff或cmp或IntelliJ插件等工具,甚至可以选择Beyond Compare! (3认同)
  • @NikolayKuznetsov,不,这些工具有不同的核心.pkgdiff - 类声明,japi-compliance-checker和clirr的可视化比较 - 更改分析(第一个用perl编写,第二个用java编写). (2认同)

sje*_*397 18

  1. 将.jar重命名为.zip
  2. 提取
  3. jad反编译类文件
  4. 递归差异

  • 这是蛮力,但这正是我做的方式.(除非我可以使用`jar`来提取内容,而不是重命名文件并使用`pkunzip`.) (2认同)
  • 可选择用调用`javap -c`替换步骤3以使其保持字节码(特别是如果通过"方法改变"OP意味着改变方法的签名). (2认同)

xue*_*eng 15

如果您在IntellijIdea中选择两个文件并按Ctrl + D,则会显示差异.我使用Ultimate并且不知道它是否适用于社区版.


Bri*_*ian 8

使用带有参数 xvf 的 jar 命令将每个 jar 解压缩到它自己的目录。即jar xvf myjar.jar每个罐子。

然后,使用 UNIX 命令diff比较这两个目录。这将显示目录中的差异。您可以使用diff -r dir1 dir2两个递归并显示每个目录(.xml、.properties 等)中文本文件的差异。

这还将显示二进制类文件是否不同。要实际比较类文件,您必须按照其他人的说明对它们进行反编译。


Raj*_*uka 6

创建一个文件夹并在其中创建另外 2 个文件夹(如旧文件夹和新文件夹)。将相关jar文件添加到文件夹中。然后使用 IntelliJ 打开第一个文件夹。之后,单击您想要比较的任意两个文件,然后右键单击并单击“比较档案”


Fox*_*BOA 5

我使用ZipDiff lib(同时拥有Java和ant API).


Che*_*eng 2

使用Java Decompiler将jar文件转为源代码文件,然后使用WinMerge进行比较。

您应该咨询源代码的版权所有者,看看是否可以这样做。