我们之前为我们的Web服务器构建了一些war文件,现在重新构建了它们。
为确保没有任何改变(作为质量检查),我们尝试使用WinMerge进行比较。我们看到的差异似乎是由某种元数据引起的,例如文件构建日期不同?
这些行之间的差异似乎是一致的,例如:
«d}<
和
³Ze<
这两个war文件的大小仍然相同。
是否有一种方法可以比较它们并剥离日期等元数据?
我们之前为我们的Web服务器构建了一些war文件,现在重新构建了它们。
为确保没有任何改变(作为质量检查),我们尝试使用WinMerge进行比较。我们看到的差异似乎是由某种元数据引起的,例如文件构建日期不同?
这些行之间的差异似乎是一致的,例如:
«d}<
和
³Ze<
这两个war文件的大小仍然相同。
是否有一种方法可以比较它们并剥离日期等元数据?
通常我会采用这样的方法,运行2个unzip命令并根据需要diff输出。例如,我需要比较两个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/
...
...
我更喜欢这种方法,因为它不需要空间来解压缩文件,然后再比较它们。
WAR文件基本上就是Zip文件。为什么不解压缩内容并逐个比较每个文件呢?这样可以避免任何作为WAR文件一部分的元数据。如果发现有任何差异,您还可以弄清楚实际上是什么差异。
如果您先解压缩文件夹,然后再进行比较,会更加容易。
在Windows中,您可以使用随JDK一起提供的“jar”可执行文件。
jar -xvf xxxx.war
您可以使用Eclipse来比较Jar/War文件。
http://www.javalobby.org/java/forums/m91839415.html该链接未提到War文件。我正在使用Indigo,它似乎只支持Jar文件的比较,因此我不得不将War扩展名重命名为Jar以便让Eclipse进行结构比较。
只需使用 pkgdiff
:
pkgdiff a.war b.war
这个工具在Linux上易于使用,输出结果也相当易于解析(您还可以从bash脚本中检查状态代码)。它还能生成一个漂亮的HTML报告。
如果您安装了WinMerge的7zip插件,就可以配置WinMerge来比较zip文件(顺便说一下,.WAR文件也是如此)。
请记住,这并不是很容易安装,您必须安装插件,它由.dll制成,并且必须提取到一个文件夹中...老实说,我不记得我是怎么做到的了。
我相信最后我使用了独立安装程序选项,并使用了9.20版本的插件。
虽然有时候,WinMerge告诉我.class文件存在差异,但它会突出显示二进制行,但我看不到任何差异。至少您可以比较war文件夹结构。
使用“Beyond Compare”免费试用版...(或购买它) 我认为这是唯一能够做到的工具。
cut -c 1-9,59-,49-57
的意义是什么? - Ajay Kumarunzip
命令的输出,有选择性地从中提取某些字符范围。请在此处查看一个示例,了解解压 WAR 文件后其外观 - https://www.baeldung.com/linux/extract-war。 - slm