You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins构建Java子模块时版本号未替换致依赖下载失败求助

Maven子模块构建时父POM版本变量未替换的问题排查与解决

问题现象

父应用构建正常,但添加子模块后Jenkins流水线构建卡住,Maven下载父POM时使用变量${egsframework.version}而非实际版本0.0.1,错误请求URL:

15:16:18  [INFO] --------------------------------[ jar ]---------------------------------
15:16:18  [INFO] Downloading from nexus: http://nexus.co/repository/testpackage/egsframework/es-pom-root/$%7Begsframework.version%7D/es-pom-root-$%7Begsframework.version%7D.pom

正确的请求URL应为:

15:16:18  [INFO] --------------------------------[ jar ]---------------------------------
15:16:18  [INFO] Downloading from testpackage: http://nexus.co/repository/testpackage/egsframework/es-pom-root/0.0.1/es-pom-root-0.0.1.pom

子模块的parent配置:

<parent>
    <groupId>egsframework</groupId>
    <artifactId>es-pom-root</artifactId>
    <version>0.0.1</version>
    <relativePath/>
</parent>

排查与解决要点

1. 检查父POM的版本定义

打开父项目的pom.xml,确认<version>标签是否直接使用固定值,而非变量占位符:

<!-- 错误示例:未插值的变量 -->
<version>${egsframework.version}</version>
<!-- 正确示例:固定版本 -->
<version>0.0.1</version>

如果父项目需要用变量统一管理版本,必须确保构建父项目时通过maven-release-plugin或自定义脚本完成版本插值,再发布到Nexus,避免占位符进入远程仓库。

2. 验证Nexus中父POM的内容

登录Nexus仓库,找到egsframework/es-pom-root/0.0.1路径下的es-pom-root-0.0.1.pom,查看文件内容是否包含${egsframework.version}。若存在,说明父项目发布时未完成变量替换,需重新发布父项目,确保发布的POM已替换所有变量为实际值。

3. 调整Jenkins流水线的构建逻辑

  • 若父、子模块属于同一多模块项目,使用Maven多模块构建命令,确保父模块先完成构建并同步到本地/远程仓库:
    mvn clean install
    
  • 若单独构建子模块,在Jenkins构建步骤中显式传递版本参数:
    mvn clean install -Degsframework.version=0.0.1
    

4. 清理本地Maven仓库缓存

如果本地仓库存在错误的父POM缓存,删除对应路径:

rm -rf ~/.m2/repository/egsframework/es-pom-root

重新构建子模块,让Maven从Nexus拉取正确的父POM。

内容的提问来源于stack exchange,提问作者Mr. E

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 01:57:37