使用versions:set设置Maven版本时大量下载pom拖慢GitLab流水线的优化方案
Maven versions:set 下载大量POM的优化方案
为什么versions:set会触发大量POM下载?
versions:set插件执行时会完整遍历项目的依赖管理树,包括dependencyManagement节点中声明的所有依赖——哪怕项目实际并未引入这些依赖。它需要下载这些POM来验证版本合法性、确认对应版本是否存在,这就是spring-boot-dependencies这类包含大量子依赖的BOM会触发批量下载的原因。而mvn test仅处理项目实际引入的依赖,因此不会出现此问题。
20分钟耗时是否正常?
对于仅含10个实际依赖的项目来说,20分钟的下载耗时完全不正常。即便无缓存,这类POM文件的下载通常只需数分钟,大概率是GitLab Runner的网络环境受限,或是配置的Maven仓库镜像速度过慢导致的。
优化方案
限制插件作用范围:使用
-Dincludes参数指定仅修改当前项目的版本,避免遍历整个依赖管理树。示例:mvn build-helper:parse-version versions:set \ -DnewVersion=\${parsedVersion.majorVersion}.\${parsedVersion.nextMinorVersion}.\${parsedVersion.incrementalVersion}\${parsedVersion.qualifier?} \ -Dincludes=你的项目groupId:你的项目artifactId插件将仅处理当前项目版本,不会解析dependencyManagement中的所有依赖。
改用轻量版本修改方式:提前用脚本计算好新版本号,直接调用
versions:set,省去build-helper:parse-version的配合。示例bash脚本:CURRENT_VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout) MAJOR=$(echo $CURRENT_VERSION | cut -d. -f1) MINOR=$(echo $CURRENT_VERSION | cut -d. -f2) NEXT_MINOR=$((MINOR + 1)) INCREMENTAL=$(echo $CURRENT_VERSION | cut -d. -f3 | cut -d- -f1) QUALIFIER=$(echo $CURRENT_VERSION | grep -o "\-.*" || echo "") NEW_VERSION="${MAJOR}.${NEXT_MINOR}.${INCREMENTAL}${QUALIFIER}" mvn versions:set -DnewVersion=$NEW_VERSION配置高速Maven镜像:在GitLab Runner的Maven配置文件(
settings.xml)中添加国内高速镜像,大幅提升POM文件下载速度。跳过依赖校验:尝试添加
-Dmaven.dependency.skip=true参数,跳过依赖检查与下载环节。注意需测试此参数是否影响版本修改的正常执行,仅当仅需修改项目自身版本时适用。
内容的提问来源于stack exchange,提问作者SGiux
相关产品推荐
相关产品推荐

