Nexus 是一個(gè)強(qiáng)大的倉(cāng)庫(kù)管理器,極大地簡(jiǎn)化了內(nèi)部倉(cāng)庫(kù)的維護(hù)和外部倉(cāng)庫(kù)的訪問。
2016 年 4 月 6 日 Nexus 3.0 版本發(fā)布,相較 2.x 版本有了很大的改變:
- 對(duì)低層代碼進(jìn)行了大規(guī)模重構(gòu),提升性能,增加可擴(kuò)展性以及改善用戶體驗(yàn)。
- 升級(jí)界面,極大的簡(jiǎn)化了用戶界面的操作和管理。
提供新的安裝包,讓部署更加簡(jiǎn)單。 - 增加對(duì) Docker, NeGet, npm, Bower 的支持。
- 提供新的管理接口,以及增強(qiáng)對(duì)自動(dòng)任務(wù)的管理。
基于Docker安裝Nexus
我們使用 Docker 來安裝和運(yùn)行 Nexus,docker-compose.yml 配置如下:
1. 在Docker 上拉取Nexus鏡像
docker pull sonatype/nexus3
2. 使用docker compose運(yùn)行Nexus,docker-compose.yml的配置如下:
version: '3.1'
services:
nexus:
restart: always
image: sonatype/nexus3
container_name: nexus
ports:
- 8081:8081
volumes:
- /usr/local/docker/nexus/data:/nexus-data
注: 啟動(dòng)時(shí)如果出現(xiàn)權(quán)限問題可以使用:chmod 777 /usr/local/docker/nexus/data 賦予數(shù)據(jù)卷目錄可讀可寫的權(quán)限
4. 啟動(dòng)docker-compose
命令如下:
docker-compose up
5. Nexus啟動(dòng)成功
地址:http://ip:port/
nexus默認(rèn)的
用戶名:admin
密碼:admin123
Maven 倉(cāng)庫(kù)介紹
代理倉(cāng)庫(kù)
意為第三方倉(cāng)庫(kù),如:
- maven-central
- nuget.org-proxy
版本策略(Version Policy):
- Release: 正式版本
- Snapshot: 快照版本
- Mixed: 混合模式
布局策略(Layout Policy):
- Strict:嚴(yán)格
- Permissive:寬松
宿主倉(cāng)庫(kù)(Hosted Repository)
存儲(chǔ)本地上傳的組件和資源的,如:
- maven-releases
- maven-snapshots
- nuget-hosted
部署策略(Deployment Policy):
- Allow Redeploy:允許重新部署
- Disable Redeploy:禁止重新部署
- Read-Only:只讀
倉(cāng)庫(kù)組(Repository Group)
通常包含了多個(gè)代理倉(cāng)庫(kù)和宿主倉(cāng)庫(kù),在項(xiàng)目中只要引入倉(cāng)庫(kù)組就可以下載到代理倉(cāng)庫(kù)和宿主倉(cāng)庫(kù)中的包,如:
- maven-public
- nuget-group
在項(xiàng)目中使用Maven私服
在Maven settings.xml中添加 Nexus認(rèn)證信息(servers 節(jié)點(diǎn)下):
<server>
<id>maven-nexus</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>nexus-releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
在 pom.xml 中添加如下代碼:
<distributionManagement>
<repository>
<id>nexus-releases</id>
<name>Nexus Release Repository</name>
<url>http://10.10.67.145:8081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>nexus-snapshots</id>
<name>Nexus Snapshot Repository</name>
<url>http://10.10.67.145:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
注意:
-
pom.xml中的id與servers節(jié)點(diǎn)下的id要匹配 - 項(xiàng)目版本號(hào)中有
SNAPSHOT標(biāo)識(shí)的,會(huì)發(fā)布到Nexus Snapshots Repository, 否則發(fā)布到Nexus Release Repository,并根據(jù) ID 去匹配授權(quán)賬號(hào)。
Snapshots 與 Releases 的區(qū)別
- nexus-releases: 用于發(fā)布 Release 版本
- nexus-snapshots: 用于發(fā)布 Snapshot 版本(快照版)
Release 版本與 Snapshot 定義如下:
Release: 1.0.0/1.0.0-RELEASE
Snapshot: 1.0.0-SNAPSHOT
- 在項(xiàng)目
pom.xml中設(shè)置的版本號(hào)添加SNAPSHOT標(biāo)識(shí)的都會(huì)發(fā)布為SNAPSHOT版本,沒有SNAPSHOT標(biāo)識(shí)的都會(huì)發(fā)布為RELEASE版本。 -
SNAPSHOT版本會(huì)自動(dòng)加一個(gè)時(shí)間作為標(biāo)識(shí),如:1.0.0-SNAPSHOT發(fā)布后為變成1.0.0-SNAPSHOT-20180522.123456-1.jar
部署到倉(cāng)庫(kù)
mvn deploy
上傳第三方 JAR 包
Nexus 3.0 不支持頁(yè)面上傳,可使用 maven 命令:
如第三方JAR包:kaptcha-2.3.jar
mvn deploy:deploy-file -DgroupId=com.google.code.kaptcha -DartifactId=kaptcha -Dversion=2.3 -Dpackaging=jar -Dfile=D:\kaptcha-2.3.jar -Durl=http://192.168.1.7:8081/repository/maven-releases/ -DrepositoryId=nexus-releases
注意事項(xiàng):
- 建議在上傳第三方 JAR 包時(shí),創(chuàng)建單獨(dú)的第三方 JAR 包管理倉(cāng)庫(kù),便于管理有維護(hù)。(maven-3rd)
-
-DrepositoryId=nexus-releases對(duì)應(yīng)的是settings.xml中 Servers 配置的 ID 名稱。(授權(quán))
配置代理倉(cāng)庫(kù)
<repositories>
<repository>
<id>maven-nexus</id>
<name>Nexus Repository</name>
<url>http://127.0.0.1:8081/repository/maven-public/</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>maven-nexus</id>
<name>Nexus Plugin Repository</name>
<url>http://127.0.0.1:8081/repository/maven-public/</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
</pluginRepository>
</pluginRepositories>