一、 将项目发布到本地maven仓库
输入clean install
运行完成后,控制台可以看到成功的信息
然后去~\.m2\repository目录可以看到已经发布到本地仓库的文件
二、 将项目发布到远程私服库
在公司项目中,不同项目组之间,可能需要公用代码,互相依赖包的情况,这时候需要把自己的应用包发布到公司的私服仓库中,以便其他同事使用,下面介绍发布大nexus私服仓库的步骤:
发布一个项目可以在nexus网页上upload,也可以通过mvn deploy命令方式发布,如果是后者则在pom.xml中添加distributionManagement标签
<distributionManagement>
<repository>
<id>releases</id>
<name>Nexus ReleaseRepository</name>
<url>http://192.168.10.6:8081/nexus/content/repositories/releases/</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<name>Nexus SnapshotRepository</name>
<url>http://192.168.10.6:8081/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>
在maven的settings.xml文件中添加服务器配置,仓库id、用户名和密码,id需要与上面pom.xml中的仓库id一致,如果不一致会报Error code 401, Unauthorized错误,id可以与私服库上的id不一致,url正确即可
<servers>
<server>
<id>releases</id>
<username>admin</username>
<password>xxx</password>
</server>
<server>
<id>snapshots</id>
<username>admin</username>
<password>xxx</password>
</server>
</servers>
输入clean deploy
执行完成之后,查看nexus服务器,点开部署的snapshots仓库,则可以看到刚才新安装的项目
到此发布完成,可能有人会注意到,上面在settings.xml文件中保存的服务器密码是明文方式保存的,存在一定的安全隐患,下面介绍下如何加密保存
很简单,通过maven提供的命令就可以完成,mvn -emp
or mvn --encrypt-master-password
首先创建个住安全密码:
E:\maven\apache-maven-3.2.5\bin>mvn-emp mypwd
{jHorajwXpMMH8urL7y9Xeh3vCOaW9OniO8la9ooPMOE=}
然后将生成的密码,copy到~/.m2/settings-security.xml中,没有这个文件则自己创建个
<settingsSecurity>
<master>{jHorajwXpMMH8urL7y9Xeh3vCOaW9OniO8la9ooPMOE=}</master>
</settingsSecurity>
然后将服务器密码进行加密
E:\maven\apache-maven-3.2.5\bin>mvn-ep xxx
{M80C6eJf+6IHYBPHzJr/mTOl12vl2aAOMPLMQAer6wg=}
然后将加密之后的密文替换之前的服务器明文密码
<servers>
<server>
<id>releases</id>
<username>admin</username>
<password>{M80C6eJf+6IHYBPHzJr/mTOl12vl2aAOMPLMQAer6wg=}</password>
</server>
<server>
<id>snapshots</id>
<username>admin</username>
<password>{M80C6eJf+6IHYBPHzJr/mTOl12vl2aAOMPLMQAer6wg=}</password>
</server>
</servers>
首先说明下snapshop快照库和release发布库的区别:
snapshop快照仓库:用于保存还处于开发过程中不稳定的版本
release发布仓库:用于保存稳定的发行版本
定义一个模块为快照版本,需要在版本号后面加上-SNAPSHOT(必须是大写)
maven的依赖是基于版本管理的,对于发布状态的artifact,如果版本号相同,即使远程仓库的包比本地新,maven不会更新下载,还是会使用本地的旧包。如果在开发过程中,我们需要更改功能、修改bug,则需要频繁的发布包,这个时候每次发布都需要升级版本号,是不合理的,所以maven提供了快照版本,在不更改版本号的情况下,会自动下载最新的快照版本。
在mvn deploy的时候,根据snapshot和release的规则,判断版本号后面是否带有-SNAPSHOT,带有则认为是快照版本,会发布到snapshot库,不带则认为是发布版本,会发布到release库中。如过pom.xml没有配置快照库,只有发布库的话,而需要发布-SNAPSHOT版本默认是发布不了的,会报错:Error code 400, Bad Request,nexus的策略禁止了这样的操作。