之前已经介绍过Nexus 部署Maven私服仓库 今天说说关于将JAR(项目)发布到Maven私服。
这个需求是因为Web项目使用的Maven库是第三方的,而三方的这个库又不稳定(如版本的更新、网络中断),虽然做了个库代理下载了索引,但有一天这个第三方的库服务突然关闭了,然后就悲剧了……
这种悲剧在我的团队中就发生过,可能是对Maven库的理解不透彻,也可能是不清楚哪些JAR是私有的。不过怎样都好,出了问题就要解决,最初是想将缺少的JAR上传到本地Maven私服,但不通其法失败,为了降低对开发的影响,最后又换了一个第三方的库……
最近终于将这个问题解决了,突然发现原来是如此的简单……
先来说说sonatype Nexus OSS的仓库
仓库类型:
group: 仓库组。可将选定仓库添加到仓库组
hosted: 宿主。自创建的文件放到此类型下
proxy: 代理。
virtual:虚拟。
仓库属性:
Policy
Release:发布,既是代表稳定版本
Snapshot:快照,代表开发版本
Download Remote Indexes :仓库远程索引,默认为False
Default Local Storage Location: 默认本地目录
Override Local Storage Location:重新本地存储位置
默认库:
- Central:该仓库代理Maven中央仓库,其策略为Release,因此只会下载和缓存中央仓库中的发布版本构件。
- Releases:这是一个策略为Releases的宿主类型仓库,用来部署组织内部的发布版本构件。
- Snapshots:这是一个策略为Snapshot的宿主类型仓库,用来部署组织内部的快照版本构件。
- 3rd party:这是一个策略为Release的宿主类型仓库,用来部署无法从公共仓库获得的第三方发布版本构件。
- Apache Snapshots:这个一个策略为Snapshots的代理仓库,用来代理Apache Maven仓库的快照版本构件。
- Codehaus SnapShots:这是一个策略为Snapshots的代理仓库,用来代理Cohehaus Maven仓库的快照版本构件。http://morrowind.blog.51cto.com/addblog.php
- Sonatype Repositories:这是一个策略为Release的代理仓库,用来代理sonatype Maven仓库的快照版本构件。
- Central M1 shadow : 用于提供中央仓库中M1格式的发布版本的构件镜像仓库
发布到Maven 中央仓库
Nexus上传:
选择Releases仓库,在"Artifact Upload"属性卡内,选择“Select Artifacts(s) to Upload"上传需要发布的包,“GAV Definition” 选择 pom文件,如果没有pom文件在选GAV Parameters后手动指定包坐标。
使用Maven部署构件至Nexus:
选择Releases/Snapshots仓库,在"Configuration"属性卡内,确认“Deployment Policy“属性为 Allow Redeploy
启用Deployment用户,Nexus默认有三个用户,其中Deployment用户用于部署项目
Deployment用户默认密码为deployment123,右键菜单可修改或重置密码
在pom.xml中分别对Release版本和Snapshot版本配置部署仓库,其中id唯一,url分别对应私服中Releases和Snapshots仓库的Repository Path:
<uniqueVersion>表示是否为Snapshot版本分配一个包含时间戳的构建号,效果如下:
<distributionManagement> <snapshotRepository> <id>user-snapshot</id> <name>User Porject Snapshot</name> <url>http://localhost:8081/nexus/content/repositories/snapshots/</url> <uniqueVersion>true</uniqueVersion> </snapshotRepository> <repository> <id>user-release</id> <name>User Porject Release</name> <url>http://localhost:8081/nexus/content/repositories/releases/</url> </repository> </distributionManagement>
Nexus的仓库对于匿名用户只是只读的。为了能够部署构件,我们还需要再settings.xml中配置验证信息:
<servers> <server> <id>user-release</id> <username>deployment</username> <password>deployment123</password> </server> <server> <id>user-snapshot</id> <username>deployment</username> <password>deployment123</password> </server> … </servers>
其中,验证信息中service的id应该与POM中repository的id一致。
这样通过 maven 可以自动布置到Nexus私服中了。命令如下:
mvn clean deploy -Dmaven.test.skip=true
也可右键pom.xml -> Run As ->2 Maven build
发布成功后,在私服的仓库中就能看到了:
参考:http://www.cnblogs.com/luotaoyeah/p/3817465.html
推荐:Maven 权威指南或Maven 实战