1. 概述
在之前的文章中,我讨论过如何将尚未部署到Maven中央仓库的第三方jar包安装到本地仓库。这种方案仅适用于小型项目——当项目规模增长时,维护完整的Nexus服务器就显得必要了。
随着项目发展,Nexus迅速成为托管第三方构件和跨开发流复用内部构件的唯一成熟方案。本文将演示如何使用Maven将项目构件部署到Nexus。
2. pom.xml中的Nexus配置
要让Maven在构建的package
阶段部署构件,需通过distributionManagement
元素指定目标仓库:
<distributionManagement>
<snapshotRepository>
<id>nexus-snapshots</id>
<url>http://localhost:8081/nexus/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement>
Nexus默认提供公共的Snapshots
仓库,无需额外配置。每个仓库的Summary
标签页都会直接显示需添加到项目pom中的<distributionManagement>
配置,简单粗暴。
3. 插件配置
默认情况下,Maven通过maven-deploy-plugin
处理部署,它绑定在默认生命周期的deploy
阶段:
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.1</version>
<executions>
<execution>
<id>default-deploy</id>
<phase>deploy</phase>
<goals>
<goal>deploy</goal>
</goals>
</execution>
</executions>
</plugin>
但该插件无法充分利用Nexus的高级功能(如staging)。Sonatype为此开发了专用插件nexus-staging-maven-plugin
,专为深度集成Nexus设计。
3.1 禁用默认插件
首先禁用默认部署插件:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>${maven-deploy-plugin.version}</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
3.2 配置Nexus专用插件
<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</serverId>
<nexusUrl>http://localhost:8081/nexus/</nexusUrl>
<skipStaging>true</skipStaging>
</configuration>
</plugin>
⚠️ 关键配置说明:
skipStaging=true
:禁用staging功能(部署-SNAPSHOT
构件时不需要)- 默认情况下,
deploy
目标会包含staging工作流,推荐用于正式发布
4. 全局settings.xml配置
部署到Nexus是安全操作——每个Nexus实例都内置了deployment
用户。凭据配置需在全局Maven settings.xml
中完成:
<servers>
<server>
<id>nexus-snapshots</id>
<username>deployment</username>
<password>nexus123</password>
</server>
</servers>
✅ 配置要点:
- 禁止在pom.xml中存储凭据(语法不支持+安全风险)
- 服务器可配置为基于密钥认证(非明文密码)
5. 部署流程
执行部署只需一条命令:
mvn clean deploy -Dmaven.test.skip=true
5.1 关于跳过测试
在部署流水线中跳过测试是合理的,因为:
- 测试应由流水线中的前置任务完成
- 部署任务应是流水线最后环节
- 典型场景:Jenkins任务链,仅当前置任务成功时才触发部署
5.2 完整测试方案
若直接执行单次命令,建议保留测试:
mvn clean deploy
6. 总结
本文提供了一种简单高效的Maven构件Nexus部署方案,核心选择包括:
- 使用
nexus-staging-maven-plugin
替代默认插件 - 禁用非必要的staging功能
- 全局配置安全凭据
这种方案虽带倾向性,但正是这些取舍保证了其实用性。未来可探讨:
- 完整启用staging功能
- 发布流程实践
最后,下篇文章将深入讨论发布流程。