代码之家  ›  专栏  ›  技术社区  ›  rbrayb

有没有比较两个Java战文件的方法?

  •  4
  • rbrayb  · 技术社区  · 16 年前

    我们曾经为我们的web服务器构建了一些war文件,现在已经重建了它们。

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

    线条上的差别似乎是一致的。

    D} & LT;

    ZE & LT;

    战争档案的大小还是一样的。

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

    7 回复  |  直到 7 年前
        1
  •  6
  •   Kris    16 年前

    war文件基本上是zip文件。为什么不提取内容并依次比较每个文件?这避免了作为war文件一部分的任何元数据。如果你发现了一些差异,你也可以弄清楚它们到底是什么。

        2
  •  7
  •   slm Vikas Hardia    8 年前

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

    $ 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/
    ...
    ...
    

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

        3
  •  6
  •   laher    16 年前

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

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

    jar -xvf xxxx.war
    

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

    希望这有帮助

        4
  •  6
  •   Venkat Sadasivam    13 年前

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

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

        5
  •  0
  •   Shanaka Jayalath    9 年前

    使用“超越比较”免费试用…(或购买) 我认为这是唯一能做到的工具。

        6
  •  0
  •   Lewis B    9 年前

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

    尽管有时,winmerge告诉我.class文件中存在差异,但它会突出二进制行,但我看不到任何差异。 至少可以比较war文件夹结构。

        7
  •  0
  •   Marcus Junius Brutus    7 年前

    只使用 pkgdiff :

    pkgdiff a.war b.war
    

    在linux中很容易获得,相当可解析的输出(您还可以从bash脚本中检查状态代码)。它还生成了一个很棒的html报告。