2012-04-16 42 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