如何从 bash 替换 war 文件的清单?
How to replace the manifest of a war file from bash?
我的当前工作目录中有一个 war 文件 foo.war。我也有一个 MANIFEST.MF 文件。
ls .
foo.war MANIFEST.MF
在foo.war中,有一个文件foo/META-INF/MANIFEST.MF。
我想用我的工作目录中的文件替换 war 中的那个文件。
我认为 zip 可以用来做这个,但我不明白 zip 文档。
正确的用法是什么?
我如何验证它是否正确完成?
我将如何使用 jar 来做到这一点?
尝试将 MANIFEST.MF 放在名为 foo/META-INF/
的目录中
然后 运行:
zip -f foo.war foo/META-INF/MANIFEST.MF
验证文件运行:
unzip -l foo.war
对 .jar 文件使用相同的方法
经过一段时间的试验,我找到了这个解决方案:
#! /bin/bash
set -e
apt-get install -y zip
apt-get install -y unzip
rm -f foo.war
cp foo.original.war foo.war
touch META-INF/MANIFEST.MF
zip -f foo.war META-INF/MANIFEST.MF
rm -f test
unzip -p foo.war META-INF/MANIFEST.MF >test
#Uncomment next line to test verification:
#echo "X" >>test
if diff test META-INF/MANIFEST.MF; then
echo "OK."
else
ERR=$?
echo "Failed (diff exit code $ERR)."
exit 1
fi
- zip 似乎仅在时间戳足够新时才替换文件。 "new enough" 到底是什么意思,我还是不清楚。
- 我使用 unzip -p foo.war META-INF/MANIFEST.MF >test
从 zip 中提取了 MANIFEST.MF 文件
- 我使用 diff 的退出代码来验证 MANIFEST.MF 是否真的被替换了。
- zip 发出警告:"zip warning: Local Entry CRC does not match CD: META-INF/MANIFEST.MF" 我不清楚这个警告的含义。
- 我真的必须将 MANIFEST.MF 放入 META-INF 文件夹中,还是可以指定应替换文件的源位置?
- 我不喜欢那样 "touch"。有没有办法在不修改时间戳的情况下强制替换?
- 字符编码、不常见的文件名和行尾怎么办?
我的当前工作目录中有一个 war 文件 foo.war。我也有一个 MANIFEST.MF 文件。
ls .
foo.war MANIFEST.MF
在foo.war中,有一个文件foo/META-INF/MANIFEST.MF。 我想用我的工作目录中的文件替换 war 中的那个文件。 我认为 zip 可以用来做这个,但我不明白 zip 文档。
正确的用法是什么?
我如何验证它是否正确完成?
我将如何使用 jar 来做到这一点?
尝试将 MANIFEST.MF 放在名为 foo/META-INF/
的目录中然后 运行:
zip -f foo.war foo/META-INF/MANIFEST.MF
验证文件运行:
unzip -l foo.war
对 .jar 文件使用相同的方法
经过一段时间的试验,我找到了这个解决方案:
#! /bin/bash
set -e
apt-get install -y zip
apt-get install -y unzip
rm -f foo.war
cp foo.original.war foo.war
touch META-INF/MANIFEST.MF
zip -f foo.war META-INF/MANIFEST.MF
rm -f test
unzip -p foo.war META-INF/MANIFEST.MF >test
#Uncomment next line to test verification:
#echo "X" >>test
if diff test META-INF/MANIFEST.MF; then
echo "OK."
else
ERR=$?
echo "Failed (diff exit code $ERR)."
exit 1
fi
- zip 似乎仅在时间戳足够新时才替换文件。 "new enough" 到底是什么意思,我还是不清楚。
- 我使用 unzip -p foo.war META-INF/MANIFEST.MF >test 从 zip 中提取了 MANIFEST.MF 文件
- 我使用 diff 的退出代码来验证 MANIFEST.MF 是否真的被替换了。
- zip 发出警告:"zip warning: Local Entry CRC does not match CD: META-INF/MANIFEST.MF" 我不清楚这个警告的含义。
- 我真的必须将 MANIFEST.MF 放入 META-INF 文件夹中,还是可以指定应替换文件的源位置?
- 我不喜欢那样 "touch"。有没有办法在不修改时间戳的情况下强制替换?
- 字符编码、不常见的文件名和行尾怎么办?