1. 程式人生 > >配置Nexus倉庫,部署構件到Nexus倉庫

配置Nexus倉庫,部署構件到Nexus倉庫

上一節,我們講述瞭如何配置安裝nexus系統,這節,我們來介紹nexus的使用
1.登入
這裡寫圖片描述
在紅色的部分點選登陸,輸入使用者名稱和密碼 admin/admin123。
這裡可以配置nexus系統,管理使用者,管理角色,管理任務,檢視系統Rss源以及檢視系統日誌,本文就介紹nexus最基本的用法。
2.代理maven中央倉庫
點選右邊選單欄的Repositories,介面的主面板會顯示所有一個所有倉庫及倉庫組的列表,你會看到它們的type, type型別欄位裡有group,hosted,proxy,virtual四種類型,我們這裡不關心virtual型別,介紹剩餘三種類型:

  • hosted,本地倉庫,通常我們會部署自己的構件到這一型別的倉庫。
  • proxy,代理倉庫,它們被用來代理遠端的公共倉庫,如maven中央倉庫。
  • group,倉庫組,用來合併多個hosted/proxy倉庫,通常我們配置maven依賴倉庫組。

由此我們知道,我們需要配置一個proxy代理倉庫,其實Nexus已經內建了Central,但我們需要做一些配置。點選倉庫列表中的Central,如下圖:
這裡寫圖片描述
我們會在主介面的下半部分看到好幾個頁面Browse Index,Browse Remote,Browse Storage,Configuration,Health Check,Routing,summary,我們點選Configuration進行配置,你現在需要關心的兩個配置項:Remote Storage Location 為遠端倉庫地址,對於Central來說是

http://repo1.maven.org/maven2/;“Download Remote Indexes”顧名思義是指是否下載遠端索引檔案,Maven Central的該欄位預設為False,這是為了防止大量Nexus無意識的去消耗中央倉庫的頻寬(中央倉庫有大量的構件,其索引檔案也很大)。這裡我們需要將其設定為True,然後點選Save。在Nexus下載的中央倉庫索引檔案之後,我們就可以在本地搜尋中央倉庫的所有構件。下圖展示了我們剛才所涉及的配置:
這裡寫圖片描述

3.新增一個代理倉庫
這裡我們再舉一個例子,我們想要代理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。配置頁面如下:
這裡寫圖片描述
4.管理本地maven倉庫
nexus預定義了三個本地倉庫,分別為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,如圖:
這裡寫圖片描述

5.管理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”,新增你感興趣的倉庫即可。
6.搜尋構件
在浩大的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”,然後輸入類名即可,這裡我不再贅述。
7.配置Maven使用Nexus
預設情況下,Maven依賴於中央倉庫,這是為了能讓Maven開箱即用,但僅僅這麼做明顯是錯誤的,這會造成大量的時間及頻寬的浪費。既然文章的上節已經介紹瞭如何安裝和配置Nexus,現在我們就要配置Maven來使用本地的Nexus,以節省時間和頻寬資源。
我們可以將Repository配置到POM中,但一般來說這不是很好的做法,原因很簡單,你需要為所有的Maven專案重複該配置。因此,這裡我將Repository的配置放到$user_home/.m2/settings.xml中:

<settings xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0    http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <localRepository>/Users/chendaoqiu/.m2/repository</localRepository>
    <interactiveMode />
    <usePluginRegistry />
    <offline />
    <pluginGroups />
  <servers>  
      <server>  
        <id>nexus-releases</id>  
        <username>admin</username>  
        <password>admin123</password>  
      </server>  
      <server>  
        <id>nexus-snapshots</id>  
        <username>admin</username>  
       <password>admin123</password>  
      </server>     
 </servers>  
    <mirrors />
    <proxies />

    <profiles>

    <profile>
            <id>dev</id>
            <repositories>
                <repository>
                    <id>nexus</id>
                    <url>http://42.121.113.40:8981/nexus/content/groups/public/</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </repository>
            </repositories>

    </profile>
    </profiles>

    <activeProfiles>
        <activeProfile>dev</activeProfile>
  </activeProfiles>

</settings>

我們不能直接在settings.xml中插入<repositories>元素,這裡我們編寫了一個profile,並添加了一個profile並使用<activeProfile>元素自動將這個profile啟用。這裡的local-nexus倉庫指向了剛才我們配置的Nexus中“Public Repositories”倉庫組,也就是說,所有該倉庫組包含的倉庫都能供我們使用。此外,我們通過 <release><snapshots>元素激活了Maven對於倉庫所有型別構件下載的支援,當然你也可以調節該配置,比如說禁止Maven從Nexus下載snapshot構件。
使用該配置,Maven就會從你的Nexus伺服器下載構件了,速度和從Central下載可不是一個數量級的。

8.部署構件至nexus
Nexus提供了兩種方式來部署構件,你可以從UI直接上傳,也可以配置Maven部署構件。
8.1通過nexus UI部署
有時候有個jar檔案你無法從公共Maven倉庫找到,但是你能從其它得到這個jar檔案(甚至是POM),那麼你完全可以將這個檔案部署到Nexus中,使其成為標準流程的一部分。步驟如下:
這裡寫圖片描述

8.2通過maven部署
更常見的用例是:團隊在開發一個專案的各個模組,為了讓自己開發的模組能夠快速讓其他人使用,你會想要將snapshot版本的構件部署到Maven倉庫中,其他人只需要在POM新增一個對於你開發模組的依賴,就能隨時拿到最新的snapshot。
以下的pom.xml配置和settings.xml能讓你通過Maven自動化部署構件:
pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    ...
<distributionManagement>
      <repository>
        <id>nexus-releases</id>
          <name>Nexus Release Repository</name>
          <url>http://42.121.113.40:8981/nexus/content/repositories/releases/</url>
      </repository>
      <snapshotRepository>
        <id>nexus-snapshots</id>
        <name>Nexus Snapshot Repository</name>
        <url>http://42.121.113.40:8981/nexus/content/repositories/snapshots/</url>
      </snapshotRepository>
    </distributionManagement>
    ...
</project>

settings.xml

<settings xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0    http://maven.apache.org/xsd/settings-1.0.0.xsd">
...
  <servers>  
      <server>  
        <id>nexus-releases</id>  
        <username>admin</username>  
        <password>admin123</password>  
      </server>  
      <server>  
        <id>nexus-snapshots</id>  
        <username>admin</username>  
       <password>admin123</password>  
      </server>     
 </servers>  
 ...

</settings>

這裡我們配置所有的snapshot版本構件部署到Nexus的Snapshots倉庫中, 所有的release構件部署到Nexus的Releases倉庫中。由於部署需要登陸,因為我們在settings.xml中配置對應Repository id的使用者名稱和密碼。
然後,在專案目錄中執行mvn deploy ,你會看到maven將專案構件部署到Nexus中,瀏覽Nexus對應的倉庫,就可以看到剛才部署的構件。當其他人構建其專案時,Maven就會從Nexus尋找依賴並下載。