检测本地 Maven 存储库损坏
Detect local maven repo corruption
从 Maven Central 下载的每个工件都带有一个 .sha1
文件。有没有办法强制 Maven(或使用 bash 脚本)重新验证其所有工件的正确性?我知道删除 .m2
通常是在对 repo 损坏有疑问时推荐的方法,但如果 maven 有校验和,我想这是因为有一种方法可以验证工件
我找不到任何使用 maven 的东西,但是这个使用 bash 的解决方案对我有用
shopt -s globstar; for f in ~/.m2/**/*.jar; do if [[ -f $f.sha1 && $(sha1sum $f | cut -f1 -d " ") != $(cat $f.sha1 | cut -f1 -d " ") ]]; then echo Bad jar: $f; fi; done
我发现已接受的答案有问题。
一些 jar 被标记为错误,但在调试时我发现一些 .sha1
文件包含 \r
windows/mac 行结尾。
它也是单线程的,所以我使用了 xargs
到 运行 并行的东西(-P8
下面的 运行 有 8 个进程)。
我的版本是:
function check_mvn_jar_files() {
if [[ ! -f ".sha1" ]]; then
echo "no sha1 file for "
exit 1
fi
SUM=$(sha1sum "" | cut -f1 -d " ")
FSUM=$(cat ".sha1" | cut -f1 -d " " | tr -d '\r')
if [[ "${SUM}" != "${FSUM}" ]]; then
echo "Bad jar: "
echo "sha1=${SUM}"
echo "file=${FSUM}"
fi
}
export -f check_mvn_jar_files
find ~/.m2/repository/ -name "*.jar" -print0 |
xargs -0 -P8 -n 1 bash -c 'check_mvn_jar_files "$@"' _
我的系统时间:
P1 - 20s
P4 - 7s
P8 - 5s
从 Maven Central 下载的每个工件都带有一个 .sha1
文件。有没有办法强制 Maven(或使用 bash 脚本)重新验证其所有工件的正确性?我知道删除 .m2
通常是在对 repo 损坏有疑问时推荐的方法,但如果 maven 有校验和,我想这是因为有一种方法可以验证工件
我找不到任何使用 maven 的东西,但是这个使用 bash 的解决方案对我有用
shopt -s globstar; for f in ~/.m2/**/*.jar; do if [[ -f $f.sha1 && $(sha1sum $f | cut -f1 -d " ") != $(cat $f.sha1 | cut -f1 -d " ") ]]; then echo Bad jar: $f; fi; done
我发现已接受的答案有问题。
一些 jar 被标记为错误,但在调试时我发现一些 .sha1
文件包含 \r
windows/mac 行结尾。
它也是单线程的,所以我使用了 xargs
到 运行 并行的东西(-P8
下面的 运行 有 8 个进程)。
我的版本是:
function check_mvn_jar_files() {
if [[ ! -f ".sha1" ]]; then
echo "no sha1 file for "
exit 1
fi
SUM=$(sha1sum "" | cut -f1 -d " ")
FSUM=$(cat ".sha1" | cut -f1 -d " " | tr -d '\r')
if [[ "${SUM}" != "${FSUM}" ]]; then
echo "Bad jar: "
echo "sha1=${SUM}"
echo "file=${FSUM}"
fi
}
export -f check_mvn_jar_files
find ~/.m2/repository/ -name "*.jar" -print0 |
xargs -0 -P8 -n 1 bash -c 'check_mvn_jar_files "$@"' _
我的系统时间:
P1 - 20s
P4 - 7s
P8 - 5s