Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 检测本地maven回购损坏_Bash_Maven_Maven 3 - Fatal编程技术网

Bash 检测本地maven回购损坏

Bash 检测本地maven回购损坏,bash,maven,maven-3,Bash,Maven,Maven 3,从maven central下载的每个工件都附带一个.sha1文件。有没有办法强制maven(或使用bash脚本)重新验证其所有工件的正确性?我知道,当对回购协议的损坏有疑问时,通常建议删除.m2,但如果maven有校验和,我想这是因为有一种方法可以验证工件,但使用maven我找不到任何东西,但使用bash的解决方案对我有效 shopt -s globstar; for f in ~/.m2/**/*.jar; do if [[ -f $f.sha1 && $(sha1sum $

从maven central下载的每个工件都附带一个
.sha1
文件。有没有办法强制maven(或使用bash脚本)重新验证其所有工件的正确性?我知道,当对回购协议的损坏有疑问时,通常建议删除
.m2
,但如果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 "$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

您可以在
settings.xml中打开校验和验证,这样错误的校验和将使您的构建失败…但重新验证无法立即完成。。。