2010-03-28 103 views
3

我們爲web服務器建立了一些war文件,現在已經重建了它們。有沒有辦法比較兩個Java war文件

爲了確保沒有任何變化(並作爲質量檢查),我們嘗試使用WinMerge進行比較。我們看到的差異看起來像是由於某種元數據造成的。這些文件是建立在不同的日期上的?

這些線的差別似乎是一致的,例如,

«d} <

³Ze<

戰爭文件仍都具有相同的尺寸。

有沒有一種方法可以比較它們去除日期等元數據?

回答

7

WAR文件基本上都是Zip文件。爲什麼不提取內容並依次比較每個文件?這可以避免作爲WAR文件一部分的任何元數據。如果發現任何差異,你也可以找出差異。

+0

http://stackoverflow.com/questions/88216/finding-differences-between-versions-of-a-java-class-file解壓縮後可能會有幫助 – Anonymoose 2010-03-29 10:45:06

+0

兩個很好的答案 - 這一個是第一個(早7秒) )所以這一個接受。 – nzpcmad 2010-03-29 19:33:51

6

如果先解壓並比較文件夾,應該會更容易。

在Windows中,你可以只使用附帶的jdk

jar -xvf xxxx.war 

的「罐子」可執行然後你可以使用的WinMerge比較2個文件夾。

希望這會有幫助

6

你可以使用eclipse來比較jar/war文件。 http://www.javalobby.org/java/forums/m91839415.html

鏈接沒有提到war文件。我使用的是Indigo,看起來Eclipse只支持jar比較,因此我必須將war擴展重命名爲jar才能得到eclipse來進行結構比較。

0

使用「超越比較」免費試用...(或購買) 我認爲這是唯一可以做到這一點的工具。

0

如果您安裝了WinMerge的7zip插件,您可以配置WinMerge以比較zip文件(以及.WAR文件的方式)。 請記住,這不是很容易安裝,你必須安裝插件,它由.dll製成,並且必須在一個文件夾中提取....老實說,我不記得我是如何做到的。 我相信在最後我使用了獨立安裝程序ooption並使用9.20版本的插件。有些時候,winmerge告訴我.class文件存在差異,它高亮了二進制行,但我沒有看到任何差異。至少你可以比較war文件夾結構。

3

我通常使用類似這樣的方法,並運行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/ 
... 
... 

我更喜歡這種方法,因爲它不需要空間來解壓縮文件,然後對它們進行比較。