Nexus是Maven倉庫管理器,管理開發所需要的構件。如果你每次都是從Apache提供的Maven中央倉庫去下載所需要的構件,那么這通常不是一個好的做法,應該在本地架設一個Maven倉庫服務器,再代理遠程倉庫的同時維護本地倉庫,以節省帶寬和時間,那么Nexus可以滿足這樣的需求。
此外Nexus還提供了強大的倉庫管理功能,構件搜索功能,基于Restful客戶端,占用較少的內存。
基于簡單的文件系統而非數據庫,這些優點使其日趨成為最流行的Maven倉庫管理器。
下載
Nexus的官方地址:http://www.sonatype.org/nexus/
下載最新的版本,目前最新版本為:
nexus-3.2.0-01-mac.tgz
nexus-3.2.0-01-unix.tar.gz
nexus-3.2.0-01-win64.zip
根據自己的操作系統選擇安裝包,我的電腦是ubuntu系統,所以我下載的是nexus-3.2.0-01-unix.tar.gz,解壓到任意目錄,獲得目錄結構:
|--nexus-3.2.0-01是Nexus的服務主目錄
|--sonatype-work是真正的倉庫
啟動
Nexus需要依賴java環境,Java的安裝這里就不做說明了,需要注意的是,官方已經明確說明,nexus3.x版本的運行環境需在java8的環境下。
如果需要修改Nexus服務端口或IP,端口配置在/?nexus-3.2.0-01/etc/ nexus-default.properties
在/?nexus-3.2.0-01/bin下找到nexus執行./nexus?run?&啟動服務。
nexus支持如下命令:{start|stop|run|run-redirect|status|restart|force-reload}
Nexus的配置需要用admin角色完成,默認密碼是admin123,進入首頁之后,在右上角進行登錄。
配置
Nexus里可以配置3種類型的倉庫,分別是proxy,hosted,group。
1.?Proxy是遠程倉庫的代理:比如說在Nexus中配置了central repository的proxy,當用戶向這個proxy請求一個構件時,這個proxy就會先在本地查找,如果找不到的話,再去遠程倉庫下載,返回給用戶。相當于一個中轉的作用。
2.?Hosted是宿主倉庫:用戶可以把一些自己的構件,deploy到hosted中。
3.?Group是倉庫組:在Maven里沒有這個概念,是Nexus特有的,目的是將上述多個倉庫聚合,對用戶暴露統一的地址,這樣用戶就不需要配置多個地址,只要統一配置group地址就可以了。
配置Repository
1.?Central Repository的proxy可能就是最關鍵的一個配置,因為絕大部分構件都是通過這個proxy得到的。在安裝完Nexus,這個proxy是預置的,代理了遠程服務https://repo1.maven.org/maven2/,網上有一些其他公開的Maven倉庫,可以用同樣的辦法,在Nexus中配置Proxy(如下圖maven-public)。
2.?Hosted?Repository一般會配置3個,分別是3rd?party,snapshots,releases,分別用來保存第三方的jar,公司內部jar包的快照,公司內部的發布版(如下圖maven-releases,maven-snapshots)。
3.?Group Repository是一個虛擬的倉庫,通過對實體倉庫聚合對外暴露統一的地址(如下圖maven-public)。
到這里nexus的基本配置就結束了,當然上面介紹的都是最最基本的配置,nexus的功能非常強大。2.x和3.x的差別也是非常大,3.x版本更增加了對 Docker,NuGet,npm,Bower的支持,全面升級了頁面,增加管理接口以自動管理任務,性能和用戶體驗也都有所改善。
使用
這里介紹一下本地Gradle工程下如何使用剛搭建起來的Nexus私服
在build.gradle里面配置:
repositories {
maven { url'http://localhost:8081/repository/maven-public'}
}
在gradle.properties里面配置
nexusUrl=http://localhost:8081
nexusUsername=admin
nexusPassword=admin123
并在build.gradle里面加入
uploadArchives {
repositories {
applyplugin:'maven'
mavenDeployer {
repository(url:"${nexusUrl}/repository/maven-releases/") {
authentication(userName:nexusUsername,password:nexusPassword)
}
snapshotRepository(url:"${nexusUrl}/repository/maven-snapshots") {
authentication(userName:nexusUsername,password:nexusPassword)
}
}
}
}
刷新gradle項目,可以看到發布包的gradle task,如圖。
此時針對gradle使用nexus私服的基本配置已經完成,可以正常下載包,并且發布snapshot及release包。
參考官方資料:https://books.sonatype.com/nexus-book/reference3/index.html
本文作者:孫剛(點融黑幫),LoanBusiness Team 軟件開發工程師,平時喜歡看看電影玩玩游戲,標準程序猿一枚。