有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

不久前,我们为web服务器构建了一些war文件,现在已经重新构建了它们

为了确保没有任何变化(作为质量检查),我们尝试使用WinMerge对它们进行比较。我们看到的差异似乎是由于某种元数据造成的,例如,文件是在不同的日期生成的

线条上的差异似乎是一致的

«d}<

³Ze<

war文件的大小仍然相同

有没有一种方法可以比较它们,去掉诸如日期之类的元数据


共 (6) 个答案

  1. # 1 楼答案

    我通常使用这样的方法,运行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/
    ...
    ...
    

    我更喜欢这种方法,因为它不需要空间来解压缩文件并进行比较

  2. # 2 楼答案

    使用“无与伦比”免费试用。。。(或购买) 我认为这是唯一能做到这一点的工具

  3. # 3 楼答案

    只需使用pkgdiff

    pkgdiff a.war b.war
    

    在Linux中随时可用,输出相当可解析(您还可以检查bash脚本中的状态代码)。它还生成一个很棒的HTML报告

  4. # 4 楼答案

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

    在Windows中,您可以只使用jdk附带的“jar”可执行文件

    jar -xvf xxxx.war
    

    然后可以使用WinMerge比较这两个文件夹

    希望这有帮助

  5. # 5 楼答案

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

  6. # 6 楼答案

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

    链接没有提到war文件。我使用的是Indigo,eclipse似乎只支持jar比较,因此我必须将war扩展重命名为jar,以便eclipse进行结构比较