1. 概述
在上一篇系列文章中,我们已经搭建了 Maven 部署到 Nexus 的流程。本文将深入讲解 Maven 发布流程的完整配置——包括项目 pom.xml
中的配置以及 Jenkins 任务中的实现。
2. 在 pom 中配置仓库
要让 Maven 能发布到 Nexus 仓库服务器,必须通过 distributionManagement
元素 定义仓库信息:
<distributionManagement>
<repository>
<id>nexus-releases</id>
<url>http://localhost:8081/nexus/content/repositories/releases</url>
</repository>
</distributionManagement>
✅ Nexus 默认自带 Releases 仓库,无需手动创建。
3. 在 Maven pom 中配置 SCM
发布流程会与项目的源代码管理系统交互——因此必须先在 pom.xml
中定义 <scm>
元素:
<scm>
<connection>scm:git:https://github.com/user/project.git</connection>
<url>http://github.com/user/project</url>
<developerConnection>scm:git:https://github.com/user/project.git</developerConnection>
</scm>
或使用 git 协议:
<scm>
<connection>scm:git:[email protected]:user/project.git</connection>
<url>scm:git:[email protected]:user/project.git</url>
<developerConnection>scm:git:[email protected]:user/project.git</developerConnection>
</scm>
⚠️ 确保所有 URL 指向正确的 Git 仓库地址。
4. 配置 Release 插件
发布流程的标准 Maven 插件是 maven-release-plugin
——其配置非常精简:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.4.2</version>
<configuration>
<tagNameFormat>v@{project.version}</tagNameFormat>
<autoVersionSubmodules>true</autoVersionSubmodules>
<releaseProfiles>releases</releaseProfiles>
</configuration>
</plugin>
关键配置说明:
releaseProfiles
强制激活名为releases
的 Maven profileautoVersionSubmodules=true
确保所有子模块版本与父版本同步(设为 false 时需手动输入每个模块版本)
发布过程中会使用 nexus-staging-maven-plugin
部署到 Nexus:
<profiles>
<profile>
<id>releases</id>
<build>
<plugins>
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<version>1.5.1</version>
<executions>
<execution>
<id>default-deploy</id>
<phase>deploy</phase>
<goals>
<goal>deploy</goal>
</goals>
</execution>
</executions>
<configuration>
<serverId>nexus-releases</serverId>
<nexusUrl>http://localhost:8081/nexus/</nexusUrl>
<skipStaging>true</skipStaging>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
⚠️ 插件配置为 跳过暂存机制(skipStaging=true
),与之前的部署流程一致。
安全配置
发布到 Nexus 是受保护操作——需在全局 settings.xml
(%USER_HOME%/.m2/settings.xml
)中配置凭证:
<servers>
<server>
<id>nexus-releases</id>
<username>deployment</username>
<password>deployment_user_password</password>
</server>
</servers>
5. 发布流程详解
将发布流程拆解为三个核心步骤。假设当前项目版本为快照版(如 0.1-SNAPSHOT
):
5.1. release:clean
清理发布环境 会:
- 删除发布描述符(
release.properties
) - 删除所有备份的 POM 文件
5.2. release:prepare
准备发布 执行以下操作:
- ✅ 执行检查:确保无未提交更改、无 SNAPSHOT 依赖
- ✅ 将 pom 中的项目版本改为正式发布号(移除 SNAPSHOT 后缀)——示例中改为
0.1
- ✅ 运行项目测试套件
- ✅ 提交并推送更改
- ✅ 基于非 SNAPSHOT 版本代码创建 Git 标签
- ✅ 增加项目版本(示例中改为
0.2-SNAPSHOT
) - ✅ 提交并推送更改
5.3. release:perform
执行发布 会:
- ✅ 从 SCM 检出发布标签
- ✅ 构建并部署发布代码
⚠️ 此步骤依赖 prepare
阶段生成的 release.properties
文件。
6. 在 Jenkins 中实现
Jenkins 可通过两种方式执行发布:使用专用插件或直接运行 Maven 命令。鉴于 Maven 命令足够简洁,推荐直接使用标准 Maven 任务:
- 创建 Jenkins 任务(构建 Maven 2/3 项目)
- 添加两个字符串参数:
releaseVersion=0.1
developmentVersion=0.2-SNAPSHOT
- 在 Build 配置中执行以下 Maven 命令:
release:clean release:prepare release:perform
-DreleaseVersion=${releaseVersion} -DdevelopmentVersion=${developmentVersion}
运行时 Jenkins 会提示输入参数值——每次需正确填写 releaseVersion
和 developmentVersion
。
⚠️ 重要提醒:
- 建议安装 Workspace Cleanup Plugin 并勾选 Delete workspace before build starts
- ❌ 禁止拆分任务:
prepare
和perform
必须在同一命令中执行(因后者依赖前者生成的release.properties
)
7. 总结
本文完整演示了 Maven 项目发布流程 的实现方案(含 Jenkins 集成)。与部署流程类似,核心通过 nexus-staging-maven-plugin
与 Nexus 交互,并重点适配了 Git 项目的发布场景。