Nexus入門指南(圖文)

[轉自] http://aijezdm915.iteye.com/blog/1335025


Nexus介紹

Nexus 是Maven倉庫管理器,若是你使用Maven,你能夠從Maven中央倉庫 下載所須要的構件(artifact),但這一般不是一個好的作法,你應該在本地架設一個Maven倉庫服務器,在代理遠程倉庫的同時維護本地倉庫,以節省帶寬和時間,Nexus就能夠知足這樣的須要。此外,他還提供了強大的倉庫管理功能,構件搜索功能,它基於REST,友好的UI是一個extjs的REST客戶端,它佔用較少的內存,基於簡單文件系統而非數據庫。這些優勢使其日趨成爲最流行的Maven倉庫管理器。web

 

下載和安裝

你能夠從http://nexus.sonatype.org/downloads/ 下載最新版本的Nexus,筆者使用的是1.3.0版本。數據庫

Nexus提供了兩種安裝方式,一種是內嵌Jetty的bundle,只要你有JRE就能直接運行。第二種方式是WAR,你只須簡單的將其發佈到web容器中便可使用。apache

 

Bundle方式安裝

解壓nexus-webapp-1.3.0-bundle.zip 至任意目錄,如D:\dev_tools ,而後打開CMD,cd至目錄D:\dev_tools\nexus-webapp-1.3.0\bin\jsw\windows-x86-32 ,運行Nexus.bat 。你會看到Nexus的啓動日誌,當你看到「Started SelectChannelConnector@0.0.0.0:8081」以後,說明Nexus啓動成功了,而後打開瀏覽器,訪問http://127.0.0.1:8081/nexus,你會看到以下的頁面:windows

要中止Nexus,Ctrl+C便可,此外InstallNexus.bat能夠用來將Nexus安裝成一個windows服務,其他的腳本則對應了啓動,中止,暫停,恢復,卸載Nexus服務。瀏覽器

 

WAR方式安裝

你須要有一個能運行的web容器,這裏以Tomcat爲例,加入Tomcat的安裝目錄位於D:\dev_tools\apache-tomcat-6.0.18 ,首先咱們將下載的nexus-webapp-1.3.0.war 重命名爲nexus.war ,而後複製到D:\dev_tools\apache-tomcat-6.0.18\webapps\nexus.war ,而後啓動CMD,cd到D:\dev_tools\apache-tomcat-6.0.18\bin\ 目錄,運行startup.bat 。一切OK,如今能夠打開瀏覽器訪問http://127.0.0.1:8080/nexus,你會獲得和上圖同樣的界面。tomcat

 

代理外部Maven倉庫

登錄

要管理Nexus,你首先須要以管理員身份登錄,點擊界面右上角的login,輸入默認的登陸名和密碼:admin/admin123,登錄成功後,你會看到左邊的導航欄增長了不少內容:服務器

這裏,能夠管理倉庫,配置Nexus系統,管理任務,管理用戶,角色,權限,查看系統的RSS源,管理及查看系統日誌,等等。你會看到Nexus的功能十分豐富和強大,本文,筆者只介紹一些最基本的管理和操做。app

 

代理Maven中央倉庫

點擊左邊導航欄的Repositories,界面的主面板會顯示全部一個全部倉庫及倉庫組的列表,你會看到它們的Type字段的值有group,hosted,proxy,virtual。這裏咱們不關心virtual,只介紹下另外三種類型:webapp

  • hosted,本地倉庫,一般咱們會部署本身的構件到這一類型的倉庫。
  • proxy,代理倉庫,它們被用來代理遠程的公共倉庫,如maven中央倉庫。
  • group,倉庫組,用來合併多個hosted/proxy倉庫,一般咱們配置maven依賴倉庫組。

由此咱們知道,咱們須要配置一個Maven中央倉庫的proxy,其實Nexus已經內置了Maven Central,但咱們須要作一些配置。點擊倉庫列表中的Maven Central,你會注意到它的Policy是release,這說明它不會代理遠程倉庫的snapshot構件,這是有緣由的,遠程倉庫的snapshot版本構件不穩定且不受你控制,使用這樣的構件含有潛在的風險。而後咱們發現主面板下方有三個Tab,分別爲Browse,Configuration和Mirrors,咱們點擊Configuration進行配置,你如今須要關心的是兩個配置項:「Remote Storage Location」爲遠程倉庫的地址,對於Maven Central來講是http://repo1.maven.org/maven2/;「Download Remote Indexes」顧名思義是指是否下載遠程索引文件,Maven Central的該字段默認爲False,這是爲了防止大量Nexus無心識的去消耗中央倉庫的帶寬(中央倉庫有大量的構件,其索引文件也很大)。這裏咱們須要將其設置爲True,而後點擊Save。在Nexus下載的中央倉庫索引文件以後,咱們就能夠在本地搜索中央倉庫的全部構件。下圖展現了咱們剛纔所涉及的配置:maven

 

添加一個代理倉庫

這裏咱們再舉一個例子,咱們想要代理Sonatype的公共倉庫,其地址爲:http://repository.sonatype.org/content/groups/public/。步驟以下,在Repositories面板的上方,點擊Add,而後選擇Proxy Repository,在下方的配置部分,咱們填寫以下的信息:Repository ID - sonatype;Repository Name - Sonatype Repository;Remote Storage Location - http://repository.sonatype.org/content/groups/public/。其他的保持默認值,須要注意的是Repository Policy,咱們不想代理snapshot構件,緣由前面已經描述。而後點擊Save。配置頁面以下:

 

管理本地Maven倉庫

Nexus預約義了3個本地倉庫,分別爲Releases,Snapshots,和3rd Party。這三個倉庫都有各自明確的目的。Releases用於部署咱們本身的release構件,Snapshots用於部署咱們本身的snapshot構件,而3rd Party用於部署第三方構件,有些構件如Oracle的JDBC驅動,咱們不能從公共倉庫下載到,咱們就須要將其部署到本身的倉庫中。

固然你也能夠建立本身的本地倉庫,步驟和建立代理倉庫相似,點擊Repository面板上方的Add按鈕,而後選擇Hosted Repository,而後在下方的配置面板中輸入id和name,注意這裏咱們再也不須要填寫遠程倉庫地址,Repository Type則爲不可修改的hosted,而關於Repository Policy,你能夠根據本身的須要選擇Release或者Snapshot,如圖:

 

管理Maven倉庫組

Nexus中倉庫組的概念是Maven沒有的,在Maven看來,無論你是hosted也好,proxy也好,或者group也好,對我都是同樣的,我只管根據groupId,artifactId,version等信息向你要構件。爲了方便Maven的配置,Nexus可以將多個倉庫,hosted或者proxy合併成一個group,這樣,Maven只須要依賴於一個group,便能使用全部該group包含的倉庫的內容。

Nexus預約義了「Public Repositories」和「Public Snapshot Repositories」兩個倉庫組,前者默認合併全部預約義的Release倉庫,後者默認合併全部預約義的Snapshot倉庫。咱們在本文前面的部分建立了一個名爲「Sonatype Repository」的倉庫,如今將其合併到「Public Repositories」中。

點擊倉庫列表中的「Public Repositories」,而後選擇下方的"Configuration" Tab,在配置面板中,將右邊「Avaiable Repositories」中的「Sonatype Repository」拖拽到左邊的「Ordered Group Repository」中,如圖:

建立倉庫組和建立proxy及hosted倉庫相似,這裏再也不贅述。須要注意的是format字段須要填寫「maven2」,添加你感興趣的倉庫便可。

 

搜索構件

在浩大的Maven倉庫中一下下點擊連接,瀏覽路徑以尋找感興趣的構件是一件很鬱悶的事情。Nexus基於nexus-indexer提供構件搜索功能,要想對倉庫進行搜索,不管是hosted,proxy,或者group,你都必須確認索引文件存在。這一點對於代理倉庫尤爲重要,有些遠程倉庫可能根本就沒有索引,因此你沒法搜索這些代理倉庫。有些遠程倉庫的遠程索引很是大,如中央倉庫達到了70M左右,那麼第一次下載索引須要花不少時間,因此要指望獲得搜索結果,確保看到以下的文件:

一旦你的Nexus擁有了本地或者遠程倉庫的索引文件,你就能夠享受Nexus的構件搜索功能了。不論登錄與否,你均可以使用關鍵字進行模糊搜索,好比我在左邊導航欄上部的搜索框內輸入junit,而後點擊搜索按鈕,右邊馬上會分頁顯示500多條的junit相關構件信息。若是你瞭解更多的信息,你也能夠經過限定groupId,artifactId,version進行搜索,點擊導航欄中的「Advanced Search」,點擊右邊全部頁面左上角的下拉框,選擇「GAV Search」。筆者這裏輸入junit:junit:4.4,而後回車:

選擇一項搜索結果,在頁面下方會顯示「Artifact Information」的面板,你能夠點擊"artifact"或者"pom"下載對應文件,而該面板右邊更顯示了一個Maven依賴配置,你能夠直接複製該配置到Maven POM中,這是個十分方便的特性。

此外,值得一提的是,Nexus還支持基於classname的搜索,你只需點擊搜索頁面右上角的下拉框,選擇「Classname Search」,而後輸入類名便可,這裏我再也不贅述。

 

配置Maven使用Nexus

默認狀況下,Maven依賴於中央倉庫,這是爲了能讓Maven開箱即用,但僅僅這麼作明顯是錯誤的,這會形成大量的時間及帶寬的浪費。既然文章的前面已經介紹瞭如何安裝和配置Nexus,如今咱們就要配置Maven來使用本地的Nexus,以節省時間和帶寬資源。

咱們能夠將Repository配置到POM中,但通常來講這不是很好的作法,緣由很簡單,你須要爲全部的Maven項目重複該配置。所以,這裏我將Repository的配置放到$user_home/.m2/settings.xml中:

Xml代碼 複製代碼  收藏代碼
  1. <settings>  
  2. ...   
  3. <profiles>  
  4.   <profile>  
  5.     <id>dev</id>  
  6.     <repositories>  
  7.       <repository>  
  8.         <id>local-nexus</id>  
  9.         <url>http://127.0.0.1:8080/nexus/content/groups/public/</url>  
  10.         <releases>  
  11.           <enabled>true</enabled>  
  12.         </releases>  
  13.         <snapshots>  
  14.           <enabled>true</enabled>  
  15.         </snapshots>  
  16.       </repository>  
  17.     </repositories>  
  18.   </profile>  
  19. </profiles>  
  20. <activeProfiles>  
  21.   <activeProfile>dev</activeProfile>  
  22. </activeProfiles>  
  23. ...   
  24. </settings>  
Xml代碼   收藏代碼
  1. <settings>  
  2. ...  
  3. <profiles>  
  4.   <profile>  
  5.     <id>dev</id>  
  6.     <repositories>  
  7.       <repository>  
  8.         <id>local-nexus</id>  
  9.         <url>http://127.0.0.1:8080/nexus/content/groups/public/</url>  
  10.         <releases>  
  11.           <enabled>true</enabled>  
  12.         </releases>  
  13.         <snapshots>  
  14.           <enabled>true</enabled>  
  15.         </snapshots>  
  16.       </repository>  
  17.     </repositories>  
  18.   </profile>  
  19. </profiles>  
  20. <activeProfiles>  
  21.   <activeProfile>dev</activeProfile>  
  22. </activeProfiles>  
  23. ...  
  24. </settings>  

因爲咱們不能直接在settings.xml中插入<repositories>元素,這裏咱們編寫了一個profile,並添加了一個profile並使用<activeProfile>元素自動將這個profile激活。這裏的local-nexus倉庫指向了剛纔咱們配置的Nexus中「Public Repositories」倉庫組,也就是說,全部該倉庫組包含的倉庫都能供咱們使用。此外,咱們經過<releases>和<snapshots>元素激活了Maven對於倉庫全部類型構件下載的支持,固然你也能夠調節該配置,好比說禁止Maven從Nexus下載snapshot構件。

使用該配置,Maven就會從你的Nexus服務器下載構件了,速度和從Central下載可不是一個數量級的。

 

部署構件至Nexus

Nexus提供了兩種方式來部署構件,你能夠從UI直接上傳,也能夠配置Maven部署構件。

 

經過Nexus UI部署

有時候有個jar文件你沒法從公共Maven倉庫找到,可是你能從其它獲得這個jar文件(甚至是POM),那麼你徹底能夠將這個文件部署到Nexus中,使其成爲標準流程的一部分。步驟以下:

點擊左邊導航欄的"Repository",在右邊的倉庫列表中選擇一個倉庫,如「3rd Party」,而後會看到頁面下方有四個tab,選擇最後一個「Upload」,你會看到構件上傳界面。選擇你要上傳的構件,並指定POM,(或者手工編寫GAV等信息),最後點擊Upload,該構件就直接被部署到了Nexus的"3rd Party"倉庫中。如圖:


經過Maven部署

更常見的用例是:團隊在開發一個項目的各個模塊,爲了讓本身開發的模塊可以快速讓其餘人使用,你會想要將snapshot版本的構件部署到Maven倉庫中,其餘人只須要在POM添加一個對於你開發模塊的依賴,就能隨時拿到最新的snapshot。

如下的pom.xml配置和settings.xml能讓你經過Maven自動化部署構件:

pom.xml

Xml代碼 複製代碼  收藏代碼
  1. <project>  
  2. ...   
  3. <distributionManagement>  
  4.   <repository>  
  5.     <id>nexus-releases</id>  
  6.       <name>Nexus Release Repository</name>  
  7.       <url>http://127.0.0.1:8080/nexus/content/repositories/releases/</url>  
  8.   </repository>  
  9.   <snapshotRepository>  
  10.     <id>nexus-snapshots</id>  
  11.     <name>Nexus Snapshot Repository</name>  
  12.     <url>http://127.0.0.1:8080/nexus/content/repositories/snapshots/</url>  
  13.   </snapshotRepository>  
  14. </distributionManagement>  
  15. ...   
  16. </project>  
Xml代碼   收藏代碼
  1. <project>  
  2. ...  
  3. <distributionManagement>  
  4.   <repository>  
  5.     <id>nexus-releases</id>  
  6.       <name>Nexus Release Repository</name>  
  7.       <url>http://127.0.0.1:8080/nexus/content/repositories/releases/</url>  
  8.   </repository>  
  9.   <snapshotRepository>  
  10.     <id>nexus-snapshots</id>  
  11.     <name>Nexus Snapshot Repository</name>  
  12.     <url>http://127.0.0.1:8080/nexus/content/repositories/snapshots/</url>  
  13.   </snapshotRepository>  
  14. </distributionManagement>  
  15. ...  
  16. </project>  

settings.xml

Xml代碼 複製代碼  收藏代碼
  1. <settings>  
  2. ...   
  3. <servers>  
  4.   <server>  
  5.     <id>nexus-releases</id>  
  6.     <username>admin</username>  
  7.     <password>admin123</password>  
  8.   </server>  
  9.   <server>  
  10.     <id>nexus-snapshots</id>  
  11.     <username>admin</username>  
  12.     <password>admin123</password>  
  13.   </server>     
  14. </servers>  
  15. ...   
  16. </settings>  
Xml代碼   收藏代碼
  1. <settings>  
  2. ...  
  3. <servers>  
  4.   <server>  
  5.     <id>nexus-releases</id>  
  6.     <username>admin</username>  
  7.     <password>admin123</password>  
  8.   </server>  
  9.   <server>  
  10.     <id>nexus-snapshots</id>  
  11.     <username>admin</username>  
  12.     <password>admin123</password>  
  13.   </server>    
  14. </servers>  
  15. ...  
  16. </settings>  

這裏咱們配置全部的snapshot版本構件部署到Nexus的Snapshots倉庫中, 全部的release構件部署到Nexus的Releases倉庫中。因爲部署須要登錄,由於咱們在settings.xml中配置對應Repository id的用戶名和密碼。

而後,在項目目錄中執行mvn deploy ,你會看到maven將項目構件部署到Nexus中,瀏覽Nexus對應的倉庫,就能夠看到剛纔部署的構件。當其餘人構建其項目時,Maven就會從Nexus尋找依賴並下載。

 

總結

本文介紹強大的倉庫管理器——Nexus,包括如何下載安裝Nexus,配置Nexus代理中央倉庫,管理Nexus的代理倉庫,本地倉庫,以及倉庫組。並幫助你瞭解如何經過Nexus搜索構件。最後,如何在Maven中配置Nexus倉庫,以及如何部署構件到Nexus倉庫中。這些都是Nexus中最基本也是最經常使用的功能。隨着使用的深刻,你會發現Nexus還有不少其它的特性,如用戶管理,角色權限管理等等。

Nexus的OSS版本是徹底開源的,若是你有興趣,你能夠學習其源碼,甚至本身實現一個REST客戶端。

立刻擁抱Nexus吧,它是免費的!

相關文章
相關標籤/搜索