Maven(五)使用Nexus搭建Maven私服
文章裝載于:http://blog.csdn.net/jun55xiu/article/details/39497089
Nexus介紹
???? Nexus是Maven倉庫管理器,如果你使用Maven,你可以從Maven中央倉庫下載所需要的構件(artifact),但這通常不是一個好的做法,你應該在本地架設一個Maven倉庫服務器,在代理遠程倉庫的同時維護本地倉庫,以節省帶寬和時間,Nexus就可以滿足這樣的需要。此外,他還提供了強大的倉庫管理功能,構件搜索功能,它基于REST,友好的UI是一個extjs的REST客戶端,它占用較少的內存,基于簡單文件系統而非數據庫。這些優點使其日趨成為最流行的Maven倉庫管理器。
安裝Nexus過程:
1.首先確定我們的環境安裝好maven,jdk等必須的環境
2.這些都準備好之后,去下載最新版本的nexus?? ?下載地址:http://www.sonatype.org/nexus/go
?
代理Maven中央倉庫
??? 點擊左邊導航欄的Repositories,界面的主面板會顯示所有一個所有倉庫及倉庫組的列表,你會看到它們的Type字段的值有group,hosted,proxy,virtual。這里我們不關心virtual,只介紹下另外三種類型:
??? hosted,本地倉庫,通常我們會部署自己的構件到這一類型的倉庫。
??? proxy,代理倉庫,它們被用來代理遠程的公共倉庫,如maven中央倉庫。
??? group,倉庫組,用來合并多個hosted/proxy倉庫,通常我們配置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”中,如圖:
?
搜索構件
?
Nexus基于nexus-indexer提供構件搜索功能,要想對倉庫進行搜索,無論是hosted,proxy,或者group,你都必須確認索引文件存在。這一點對于代理倉庫尤其重要,有些遠程倉庫可能根本就沒有索引,所以你無法搜索這些代理倉庫。有些遠程倉庫的遠程索引非常大,如中央倉庫達到了70M左右,那么第一次下載索引需要花很多時間,所以要期望得到搜索結果,確保看到相應的文件。
一旦你的Nexus擁有了本地或者遠程倉庫的索引文件,你就可以享受Nexus的構件搜索功能了。不論登陸與否,你都可以使用關鍵字進行模糊搜索,比如我在左邊導航欄上部的搜索框內輸入junit,然后點擊搜索按鈕,右邊立刻會分頁顯示500多條的junit相關構件信息。如果你了解更多的信息,你也可以通過限定groupId,artifactId,version進行搜索,點擊導航欄中的“Advanced Search”,點擊右邊所有頁面左上角的下拉框,選擇“GAV Search”。筆者這里輸入junit:junit:4.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 version="1.0" encoding="UTF-8"?>?
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"?
????????? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"?
????????? xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>D:\Repositories\Maven\</localRepository>
<pluginGroups></pluginGroups>?
<proxies></proxies>?
<servers>
? <server>
????? <id>NSX-Release-Repository</id>
????? <username>admin</username>
????? <password>admin123</password>
??? </server>
? ? ? ?<server>
????? <id>NSX-SnapShot-Repository</id>
????? <username>admin</username>
????? <password>admin123</password>
??? </server>
</servers>?
<profiles>?
?? ? <profile> ?
??????? <id>g11n-dev</id> ?
??????? <repositories> ?
????????? <repository> ?
??????????? <id>G11n-Repository</id> ?
??????????? <url>http://10.117.168.249:8081/nexus/content/groups/public/</url> ?
??????????? <releases> ?
????????????? <enabled>true</enabled> ?
??????????? </releases> ?
??????????? <snapshots> ?
????????????? <enabled>true</enabled> ?
??????????? </snapshots> ?
????????? </repository> ?
??????? </repositories> ?
????? </profile> ?
</profiles>?
?<activeProfiles> ?
????? <activeProfile>g11n-dev</activeProfile> ?
?? </activeProfiles>
</settings>
由于我們不能直接在settings.xml中插入<repositories>元素,這里我們編寫了一個profile,并添加了一個profile并使用<activeProfile>元素自動將這個profile激活。這里的G11n-Repository倉庫指向了剛才我們配置的Nexus中“Public Repositories”倉庫組的地址”http://10.117.168.249:8081/nexus/content/groups/public/“,也就是說,所有該倉庫組包含的倉庫都能供我們使用。此外,我們通過<releases>和<snapshots>元素激活了Maven對于倉庫所有類型構件下載的支持,當然你也可以調節該配置,比如說禁止Maven從Nexus下載snapshot構件。
部署構件至Nexus
Nexus提供了兩種方式來部署構件,你可以從UI直接上傳,也可以配置Maven部署構件。
?
?
有時候有個jar文件你無法從公共Maven倉庫找到,但是你能從其它得到這個jar文件(甚至是POM),那么你完全可以將這個文件部署到Nexus中,使其成為標準流程的一部分。步驟如下:
點擊左邊導航欄的"Repository",在右邊的倉庫列表中選擇一個倉庫,如“3rd Party”,然后會看到頁面下方有四個tab,選擇最后一個“Upload”,你會看到構件上傳界面。選擇你要上傳的構件,并指定POM,(或者手工編寫GAV等信息),最后點擊Upload,該構件就直接被部署到了Nexus的"3rd Party"倉庫中。舉例上傳oracle的驅動包:圖5
怎么使用上傳的jar包吧,很簡單的,前提是你已經建立了一個maven的項目。含有pom.xml這個文件,在這個文件中添加如下:圖6
?
然后在pom.xml中添加如下的本地倉庫地址:
。。。 <dependencies><dependency><groupId>com.oracle</groupId><artifactId>ojdbc</artifactId><version>10.1.0.2.0</version></dependency></dependencies>?
通過Maven部署
?? 更常見的用例是:團隊在開發一個項目的各個模塊,為了讓自己開發的模塊能夠快速讓其他人使用,你會想要將snapshot版本的構件部署到Maven倉庫中,其他人只需要在POM添加一個對于你開發模塊的依賴,就能隨時拿到最新的snapshot。
以下的pom.xml配置和settings.xml能讓你通過Maven自動化部署構件:
pom.xml
<project>
...
<distributionManagement>
? <repository>
?? ? <id>NSX-Release-Repository</id>
?? ?? <name>NSX Release Repository</name>
????? <url>http://10.117.168.249:8081/nexus/content/repositories/NSX-Release-Repository</url>
? </repository>
? <snapshotRepository>
???<id>NSX-SnapShot-Repository</id>
? ? <name>NSX Snapshot Repository</name>
??? <url>http://10.117.168.249:8081/nexus/content/repositories/NSX-SnapShot-Repository</url>
? </snapshotRepository>
</distributionManagement>
...
</project>
?
settings.xml
見上
這里我們配置所有的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還有很多其它的特性,如用戶管理,角色權限管理等等。
?
轉載于:https://www.cnblogs.com/luffigo/p/5224667.html
總結
以上是生活随笔為你收集整理的Maven(五)使用Nexus搭建Maven私服的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 最老程序员创业札记:全文检索、数据挖掘、
- 下一篇: kl距离 java_相对熵(relati