Nexus3中的关键角色与用户
Snapshot库的Deploy角色
- nx-repository-view-maven2-maven-snapshots-edit
在Nexus库中创建拥有以上角色的用户,例如 developer。
这个角色,必须要包含 nx-anonymous 这个「匿名角色」,否则会被以 ReasonPhrase:Forbidden. 理由拒绝。
Release库的Deploy角色
- nx-repository-view-maven2-maven-releases-edit
在Nexus库中创建拥有以上角色的用户,例如 publisher。
这个角色,必须要包含 nx-anonymous 这个「匿名角色」,否则会被以 ReasonPhrase:Forbidden. 理由拒绝。
.m2/settings.xml中servers的设置
<settings> <servers> <server> <id>snapshot</id> <username>developer</username> <password>password-of-developer-in-nexus</password> </server> <server> <id>release</id> <username>publisher</username> <password>password-of-publisher-in-nexus</password> </server> </servers> ... </settings>
maven project
super-parent maven project
对于每个组织或者企业,使用一个顶级的、唯一的parent project是十分有必要的,这可以统一各级子工程的发布管理配置。
<scm>
<url>http://your.domain/and-path</url>
<connection>scm:git:ssh://git@your.vcs.domain/your-path</connection>
</scm>
<distributionManagement>
<snapshotRepository>
<id>snapshot</id>
<url>http://your.nexus/repository/maven-snapshots</url>
</snapshotRepository>
<repository>
<id>release</id>
<url>http://your.nexus/repository/maven-releases</url>
</repository>
</distributionManagement>
<build>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-release-plugin</artifactId>
<version>2.5.3</version>
</plugin>
</plugins>
</pluginManagement>
</build>
其中,snapshotRepository 中的 id 与 .m2/settings.xml 中的 server/id 需要保持一致。
在例子中,两处都都同时使用了 snapshot` 以及 ``release 。
snapshot deploy
snapshot deploy 是每个developer日常进行snapshot library发布的正常行为。
在每个developer的本地,都可以针对一个 maven project 执行: mvn deploy 操作,将任意的 Version 以 -SNAPSHOT 结尾的 artifact 部署至 snapshot 库中。
release publish
maven-release-plugin 是用作正式发布使用的maven插件。
其中有两个关键的mvn 指令, mvn release:prepare 以及 mvn release:perform
- mvn release:prepare
这个指令主要的操作目标是VCS (例如GitLab) ,它的执行条件有:
- 本地的所有代码已经提交,对于git而言,本地的所有代码,都已经经过 git push ,也就是说stage区不存在修改过的文件。
- mave坐标中的Version,必须以 -SNAPSHOT 结尾,否则该指令会罢工。这个指令的执行过程,是交互式的,它会询问三项内容:
- 指定要发布的Version值,一般来说,它会自动提示不包含 -SNAPSHOT 部分的版本号
- VCS的tag名称。例如,git分支上的tag。
- 下一个开发版,含的 -SNAPSHOT 版本号,一般来说,它会自动将最后一位数字版本号自动增加1。
这个动作执行之后,会生成两个主要的文件:
- 原来pom.xml的备份文件
- release.properties,即本次release的相关信息。
同时,这个指令还会对修改后的release版本进行
- mvn release:perform
这个指令主要的操作目标是仓库 (Repository,例如 Nexus)。
它的主要目的,是把本地已经生成好的 release library 部署至仓库。并不会对 VCS 进行任何写操作。