Nexus是Maven倉庫管理器,也可以叫Maven的私服。Nexus是一個強大的Maven倉庫管理器,它極大地簡化了自己內部倉庫的維護和外部倉庫的訪問。利用Nexus你可以只在一個地方就能夠完全控制訪問和部署在你所維護倉庫中的每個Artifact。Nexus是一套“開箱即用”的系統不需要數據庫,它使用文件系統加Lucene來組織數據。
Nexus不是Maven的核心概念,它僅僅是一種衍生出來的特殊的Maven倉庫。對于Maven來說,倉庫只有兩種:本地倉庫和遠程倉庫。
本地倉庫就是我們在maven的
setting.xml
中配置的本地倉庫地址。由于最原始的本地倉庫是空的,Maven必須知道至少一個可用的遠程倉庫,才能在執行Maven命令的時候下載到需要的構件。
私服是架設在局域網的一種特殊的遠程倉庫,目的是代理遠程倉庫及部署第三方構件。有了私服之后,當 Maven 需要下載構件時,直接請求私服,私服上存在則下載到本地倉庫;否則,私服請求外部的遠程倉庫,將構件下載到私服,再提供給本地倉庫下載。
2016年4月6日Nexus 3.0版本發布,相較2.x版本有了很大的改變:
對低層代碼進行了大規模重構,提升性能,增加可擴展性以及改善用戶體驗。
- 升級界面,極大的簡化了用戶界面的操作和管理。
- 提供新的安裝包,讓部署更加簡單。
- 增加對Docker, NeGet, npm, Bower的支持。
- 提供新的管理接口,以及增強對自動任務的管理。
下載地址:http://www.sonatype.com/downl...
官方文檔:http://books.sonatype.com/nex...
PDF文檔:http://books.sonatype.com/nex...
環境要求
Windows / Linux / Mac
Java JDK 8+
Apache Maven 3.0+
安裝步驟
示例基于Ubuntu 16.04 LTS環境,安裝前檢查JDK:
java version "1.8.0_112"
Java(TM) SE Runtime Environment (build 1.8.0_112-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.112-b15, mixed mode)
1. 創建管理用戶
該步驟不是必須的,但為了更好的管理和維護,建議創建一個管理用戶。
使用root權限創建一個用戶
useradd nexus
passwd nexus
2. 解壓和安裝
上傳不管用戶通過wget也好還是smb上傳也好,不再詳述。解壓相應的下載包。
LICENSE.txt NOTICE.txt bin deploy etc lib public system
# bin: 啟動腳本和啟動時的配置文件
# data: 數據存儲目錄
# etc: 配置文件
# lib: Apache Karaf的二進制包
# public: 公共資源
# system: 系統依賴的組件和插件
# 指定JDK版本(可選)
vim nexus-3.5.1-02/bin/nexus
INSTALL4J_JAVA_HOME_OVERRIDE="/usr/lib/jvm/java-8-oracle"
# 修改使用的用戶(不建議使用root用戶)
vim bin/nexus.rc
run_as_user="nexus"
3. 運行
./nexus-3.5.1-02/bin/nexus start
# 可選的命令:{start|stop|run|run-redirect|status|restart|force-reload}
4. 驗證安裝
打開瀏覽器輸入:http://127.0.0.1:8081
配置
- JVM配置(可選)
cat nexus-3.0.1-01/bin/nexus.vmoptions
- 配置端口號(可選,推薦為默認端口號:8081)
vim nexus-3.0.1-01/etc/org.sonatype.nexus.cfg
application-port=9081
3.配置數據存儲目錄(可選)
vim nexus-3.0.1-01/bin/nexus.vmoptions
# 默認存儲目錄
-Dkaraf.data=data
-Djava.io.tmpdir=data/tmp
- 配置代理(可選)
Apache httpd.
nginx.
- 配置SSL(可選)
倉庫介紹
1. 代理倉庫(Proxy Repository)
顧名思義是代理第三方倉庫的,如:
- maven-central
- nuget.org-proxy
版本策略(Version Policy):
- Release: 正式版本
- Snapshot: 快照版本
- Mixed: 混合模式
布局策略(Layout Policy):
- Strict:嚴格
- Permissive:寬松
2. 宿主倉庫(Hosted Repository)
存儲本地上傳的組件和資源的,如:
- maven-releases
- maven-snapshots
- nuget-hosted
部署策略(Deployment Policy):
- Allow Redeploy:允許重新部署
- Disable Redeploy:禁止重新部署
- Read-Only:只讀
3. 倉庫組(Repository Group)
通常包含了多個代理倉庫和宿主倉庫,在項目中只要引入倉庫組就可以下載到代理倉庫和宿主倉庫中的包,如:
- maven-public
- nuget-group
與Maven集成
1. Servers 配置認證信息
在Maven settings.xml中添加Nexus認證信息:
<server>
<id>nexus-releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
- nexus-releases: 用于發布Release版本
- nexus-snapshots: 用于發布Snapshot版本
Release版本與Snapshot版本的區分:
Release: 4.3.0
Snapshot: 4.3.0-SNAPSHOT
在項目POM.xml中設置的版本號添加SNAPSHOT標識的都會發布為SNAPSHOT版本,沒有SNAPSHOT標識的都會發布為Release版本。
SNAPSHOT版本會自動加一個時間作為標識,如:4.3.0-SNAPSHOT
發布后為變成4.3.0-SNAPSHOT-20160712.114532-1.jar
2. 配置自動化部署構件
在POM.xml中添加以下代碼:
<distributionManagement>
<repository>
<id>nexus-releases</id>
<name>Nexus Release Repository</name>
<url>http://127.0.0.1:8081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>nexus-snapshots</id>
<name>Nexus Snapshot Repository</name>
<url>http://127.0.0.1:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
注意事項:
- ID名稱必須要與settings.xml中Servers配置的ID名稱保持一致。
- 項目版本號中有SNAPSHOT標識的,會發布到Nexus Snapshots Repository, 否則發布到Nexus Release Repository,并根據ID去匹配授權賬號。
3. 部署到Nexus倉庫
mvn deploy
4. 上傳第三方JAR包
Nexus 3.0不支持頁面上傳,可使用maven命令:
# 如第三方JAR包:aliyun-sdk-oss-2.2.3.jar
mvn deploy:deploy-file
-DgroupId=com.aliyun.oss
-DartifactId=aliyun-sdk-oss
-Dversion=2.2.3
-Dpackaging=jar
-Dfile=D:\aliyun-sdk-oss-2.2.3.jar
-Durl=http://127.0.0.1:8081/repository/maven-3rd/
-DrepositoryId=nexus-releases
注意事項:
- 建議在上傳第三方JAR包時,創建單獨的第三方JAR包管理倉庫,便于管理有維護。(maven-3rd)
- -DrepositoryId=nexus-releases 對應的是settings.xml中Servers配置的ID名稱。(授權)
5. 使用代理中央倉庫
<repositories>
<repository>
<id>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>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>
注意事項:
- 在開發中如果有嚴格的管理要求,可將SNAPSHOT和RELEASE單獨配置。
- 有插件依賴時配置插件倉庫,默認會使用Maven中央倉庫。