检测本地maven repo损坏

时间:2017-06-29 00:21:51

标签: bash maven maven-3

从maven central下载的每个工件都附带一个.sha1文件。有没有办法强制maven(或使用bash脚本)重新验证其所有工件的正确性?我知道只是删除.m2通常是有关回购损坏的怀疑的推荐方式,但如果maven有校验和,我想是因为有办法验证工件

2 个答案:

答案 0 :(得分:0)

我无法使用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

答案 1 :(得分:0)

我发现接受的答案有问题。

一些 jar 被标记为错误,但在调试时我发现一些 .sha1 文件包含 \r windows/mac 行尾。

它也是单线程的,所以我使用 xargs 并行运行(-P8 下面运行 8 个进程)。

我的版本是:

function check_mvn_jar_files() {
    if [[ ! -f "$1.sha1" ]]; then
        echo "no sha1 file for $1"
        exit 1
    fi
    SUM=$(sha1sum "$1" | cut -f1 -d " ")
    FSUM=$(cat "$1.sha1" | cut -f1 -d " " | tr -d '\r')
    if [[ "${SUM}" != "${FSUM}" ]]; then
        echo "Bad jar: $1"
        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