2012-04-16 40 views
2

我的JSF項目被部署爲EAR文件。它還包括一些戰爭文件。我需要EAR的爆炸版本(包括爆炸的內部WAR)。分解EAR文件

有什麼工具可以做到嗎?

+0

如果它真的是你的項目,你應該有源?無論如何,您可以使用ZIP命令來提取EAR,WAR文件也是如此。 ***或***,您是否在問如何將EAR作爲展開式存檔部署到應用程序服務器? – Perception 2012-04-16 13:25:04

+0

是的,這是我的來源。我想知道是否有一個自動化的工具來做到這一點,因爲耳朵裏有很多戰爭。我認爲將EAR部署爲展開式存檔的唯一方法是將耳朵中的內容複製到名爲「 .ear」的文件夾中,對嗎? – Tony 2012-04-16 13:25:55

回答

4

以編程方式或手動? EAR和WAR文件(如JAR文件)實際上只是具有已知內部文件/文件夾結構的ZIP文件。這意味着您可以像使用代碼或桌面應用程序一樣提取任何其他ZIP文件的EAR和WAR。


for Windows命令行工具將是巨大的。

+0

我想知道是否有一個自動化的工具來做到這一點,因爲耳朵裏有很多戰爭。 – Tony 2012-04-16 13:28:24

+0

不是編程式的,我的意思是,我不想從代碼中爆炸EAR。 Windows的命令行工具將非常棒。 – Tony 2012-04-16 13:31:44

+0

@Tony看到我的編輯。 – 2012-04-16 13:45:32

3

馬特的回答很有幫助,但有時很高興爲您寫出來。

這是我寫的一個shell腳本,用於解決我實際在Cygwin中運行的問題,但也可能在Linux中工作。它將解壓縮並打開戰爭,耳朵或罐子,並繼續解壓縮,直到遞歸直到沒有剩下。您可能想要在結果目錄中使用「diff -r ear1.ear-contents ear2.ear-contents」來比較兩個ear文件。

#!/bin/sh 

rm -rf ${1}-contents 
mkdir ${1}-contents 

echo "Unpacking ${1} to ${1}-contents" 
unzip -d ${1}-contents ${1} 

cd ${1}-contents 

FILES_TO_PROCESS=`find . -type f \(-name "*.ear" -or -name "*.war" -or -name "*.jar" \)` 

until [ "$FILES_TO_PROCESS" == "" ] ; do 

    for myFile in $FILES_TO_PROCESS ; do 

     mkdir ${myFile}-contents 
     echo "Unpacking ${myFile} to ${myFile}-contents" 
     unzip -d ${myFile}-contents ${myFile} 
     rm $myFile 

    done 


    FILES_TO_PROCESS=`find . -type f \(-name "*.ear" -or -name "*.war" -or -name "*.jar" \)` 
    echo "recursing to process files: $FILES_TO_PROCESS" 
done