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
相关产品推荐
相关产品推荐

