我們爲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