如何在Bamboo CI中动态使用mvn deploy:file部署自定义Nexus构件?
自定义Jar包部署到Nexus的动态版本解决方案
方案一:修复pom中maven-deploy-plugin的权限问题并动态复用项目版本
如果想通过mvn clean deploy直接完成部署,先解决权限问题,同时让插件自动读取pom版本:
- 检查CI环境的Maven
settings.xml,确保其中配置的${targetrepositoryid}对应的账号拥有Nexus仓库的deploy权限,并且在CI执行时通过-s参数指定该配置文件(比如mvn clean deploy -s /opt/maven/settings.xml)。 - 调整插件配置,直接使用Maven内置的
${project.version}变量获取当前项目版本,无需手动拼接revision和changelist:
<plugin> <artifactId>maven-deploy-plugin</artifactId> <version>3.1.0</version> <executions> <execution> <id>deploy-jar</id> <phase>deploy</phase> <goals> <goal>deploy-file</goal> </goals> <configuration> <file>${project.build.outputDirectory}/my-customized.jar</file> <groupId>com.test.project</groupId> <artifactId>my-customized-service</artifactId> <version>${project.version}</version> <repositoryId>${targetrepositoryid}</repositoryId> <url>${targeturl}</url> <packaging>jar</packaging> <generatePom>false</generatePom> </configuration> </execution> </executions> </plugin>
${project.version}会自动继承pom中定义的版本(包括revision+changelist的拼接结果),实现版本动态同步。
方案二:命令行方式动态获取pom版本
如果倾向于保留直接执行deploy:deploy-file的方式,可通过Maven的help:evaluate命令自动提取pom版本,再传入部署命令:
在Bamboo的脚本执行步骤中运行以下命令:
# 从pom.xml中提取项目版本,输出纯文本结果 PROJECT_VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout) # 执行部署,动态带入版本号 mvn clean install deploy:deploy-file \ -Dfile=${project.build.outputDirectory}/my-customized.jar \ -DgroupId=com.test.project \ -DartifactId=my-customized-service \ -Dversion=${PROJECT_VERSION} \ -DrepositoryId=${targetrepositoryid} \ -Durl=${targeturl} \ -Dpackaging=jar \ -DgeneratePom=false
此方法无需修改pom插件配置,全程通过命令行动态获取版本,避免手动维护版本号。
关键注意事项
- 确保CI环境中Maven能正确访问pom.xml文件,路径配置无误。
- Nexus权限问题需确认账号权限:必须拥有目标仓库的部署(deploy)权限,而非仅读取权限。
- 若使用Maven版本管理(如
revision、changelist属性),${project.version}会自动处理版本拼接,无需额外配置。
内容的提问来源于stack exchange,提问作者user5417542
相关产品推荐
相关产品推荐

