配置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來說是
3.新增一個代理倉庫
這裡我們再舉一個例子,我們想要代理Sonatype的公共倉庫,其地址為:http://repository.sonatype.org/content/groups/public/
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尋找依賴並下載。