有没有办法比较两个Java war文件

时间:2010-03-28 23:54:57

标签: java

我们之前为我们的网络服务器构建了一些war文件,现在已经重建了它们。

为确保没有任何变化(以及作为质量检查),我们尝试使用WinMerge对它们进行比较。我们可以看到的差异看起来像是由于某种元数据,例如在不同日期构建的文件?

线条的差异似乎是一致的,例如

  

«d}<

  

³Ze<

战争文件的大小仍然相同。

有没有办法比较它们去除元数据,比如日期?

7 个答案:

答案 0 :(得分:7)

我通常使用这样的方法并运行2个解压缩命令并根据需要区分输出。例如,我需要比较2个Java WAR文件。

$ sdiff --width 160 \
   <(unzip -l -v my_num1.war | cut -c 1-9,59-,49-57 | sort -k3) \
   <(unzip -l -v my_num2.war | cut -c 1-9,59-,49-57 | sort -k3)

导致输出如此:

--------          -------                                                       --------          -------
Archive:                                                                        Archive:
-------- -------- ----                                                          -------- -------- ----
48619281          130 files                                                   | 51043693          130 files
    1116 060ccc56 index.jsp                                                         1116 060ccc56 index.jsp
       0 00000000 META-INF/                                                            0 00000000 META-INF/
     155 b50f41aa META-INF/MANIFEST.MF                                        |      155 701f1623 META-INF/MANIFEST.MF
 Length   CRC-32  Name                                                           Length   CRC-32  Name
    1179 b42096f1 version.jsp                                                       1179 b42096f1 version.jsp
       0 00000000 WEB-INF/                                                             0 00000000 WEB-INF/
       0 00000000 WEB-INF/classes/                                                     0 00000000 WEB-INF/classes/
       0 00000000 WEB-INF/classes/com/                                                 0 00000000 WEB-INF/classes/com/
...
...

我更喜欢这种方法,因为它不需要空间来解压缩文件然后比较它们。

答案 1 :(得分:6)

WAR文件基本上是Zip文件。为什么不提取内容并依次比较每个文件?这可以避免作为WAR文件一部分的任何元数据。如果发现任何差异,您还可以找出实际差异。

答案 2 :(得分:6)

如果先将它们解压缩然后比较文件夹,应该会更容易。

在Windows中,你可以使用jdk附带的'jar'可执行文件

jar -xvf xxxx.war

然后您可以使用WinMerge来比较2个文件夹。

希望这有帮助

答案 3 :(得分:6)

你可以使用eclipse来比较jar / war文件。 http://www.javalobby.org/java/forums/m91839415.html

该链接未提及war文件。我正在使用Indigo,看来eclipse只支持jar比较,因此我必须将war扩展名重命名为jar以获得eclipse进行结构比较。

答案 4 :(得分:0)

使用“Beyond Compare”免费试用...(或购买) 我认为这是唯一可以做到这一点的工具。

答案 5 :(得分:0)

如果安装WinMerge的7zip插件,可以配置WinMerge来比较zip文件(顺便说一下,.WAR文件)。 请记住,安装起来不是很容易,你必须安装插件,它是由.dll组成的,必须在文件夹中提取....老实说,我不记得我是怎么做到的。 我最后相信我使用了独立的安装程序ooption并使用9.20版本的插件。

Althoug有些时候,winmerge告诉我.class文件中有不同之处,它可以高亮显示二进制行,但我没有看到任何不同之处。 至少你可以比较war文件夹结构。

答案 6 :(得分:0)

只需使用pkgdiff

pkgdiff a.war b.war

在Linux上很容易获得,可以进行相当可分析的输出(您还可以从bash脚本检查状态代码)。它还会生成一个很棒的HTML报告。