我们为web服务器建立了一些war文件,现在已经重建了它们。有没有办法比较两个Java war文件
为了确保没有任何变化(并作为质量检查),我们尝试使用WinMerge进行比较。我们看到的差异看起来像是由于某种元数据造成的。这些文件是建立在不同的日期上的?
这些线的差别似乎是一致的,例如,
«d} <
和
³Ze<
战争文件仍都具有相同的尺寸。
有没有一种方法可以比较它们去除日期等元数据?
我们为web服务器建立了一些war文件,现在已经重建了它们。有没有办法比较两个Java war文件
为了确保没有任何变化(并作为质量检查),我们尝试使用WinMerge进行比较。我们看到的差异看起来像是由于某种元数据造成的。这些文件是建立在不同的日期上的?
这些线的差别似乎是一致的,例如,
«d} <
和
³Ze<
战争文件仍都具有相同的尺寸。
有没有一种方法可以比较它们去除日期等元数据?
WAR文件基本上都是Zip文件。为什么不提取内容并依次比较每个文件?这可以避免作为WAR文件一部分的任何元数据。如果发现任何差异,你也可以找出差异。
如果先解压并比较文件夹,应该会更容易。
在Windows中,你可以只使用附带的jdk
jar -xvf xxxx.war
的“罐子”可执行然后你可以使用的WinMerge比较2个文件夹。
希望这会有帮助
你可以使用eclipse来比较jar/war文件。 http://www.javalobby.org/java/forums/m91839415.html
链接没有提到war文件。我使用的是Indigo,看起来Eclipse只支持jar比较,因此我必须将war扩展重命名为jar才能得到eclipse来进行结构比较。
使用“超越比较”免费试用...(或购买) 我认为这是唯一可以做到这一点的工具。
如果您安装了WinMerge的7zip插件,您可以配置WinMerge以比较zip文件(以及.WAR文件的方式)。 请记住,这不是很容易安装,你必须安装插件,它由.dll制成,并且必须在一个文件夹中提取....老实说,我不记得我是如何做到的。 我相信在最后我使用了独立安装程序ooption并使用9.20版本的插件。有些时候,winmerge告诉我.class文件存在差异,它高亮了二进制行,但我没有看到任何差异。至少你可以比较war文件夹结构。
我通常使用类似这样的方法,并运行2个unzip命令并根据需要区分输出。例如,我需要比较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/
...
...
我更喜欢这种方法,因为它不需要空间来解压缩文件,然后对它们进行比较。
http://stackoverflow.com/questions/88216/finding-differences-between-versions-of-a-java-class-file解压缩后可能会有帮助 – Anonymoose 2010-03-29 10:45:06
两个很好的答案 - 这一个是第一个(早7秒) )所以这一个接受。 – nzpcmad 2010-03-29 19:33:51