我的 JSF 项目被部署为一个 EAR 文件。它还包括一些战争文件。我需要 EAR 的分解版本(包括分解的内部 WAR)。
有什么工具可以做到吗?
以编程方式还是手动?EAR 和 WAR 文件与 JAR 文件一样,实际上只是具有已知内部文件/文件夹结构的 ZIP 文件。这意味着您可以像任何其他 ZIP 文件一样使用代码或使用桌面应用程序来提取 EAR 和 WAR。
windows的命令行工具会很棒。
马特的回答很有帮助,但有时很高兴为您写出来。
这是我为解决这个问题而编写的一个 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