Nexus部署 web
Nexus 是Maven倉庫管理器,若是你使用Maven,你能夠從Maven中央倉庫 下載所須要的構件(artifact),但這一般不是一個好的作法,你應該在本地架設一個Maven倉庫服務器,在代理遠程倉庫的同時維護本地倉庫,以節 省帶寬和時間,Nexus就能夠知足這樣的須要。此外,他還提供了強大的倉庫管理功能,構件搜索功能,它基於REST,友好的UI是一個extjs的 REST客戶端,它佔用較少的內存,基於簡單文件系統而非數據庫。這些優勢使其日趨成爲最流行的Maven倉庫管理器。 數據庫
從http://nexus.sonatype.org/downloads/ 下載最新版本的Nexus,筆者使用的是2.4版本。 apache
Nexus提供了兩種安裝方式,一種是內嵌Jetty的bundle,只要你有JRE就能直接運行。第二種方式是WAR,你只須簡單的將其發佈到web容器中便可使用。 windows
該文檔中使用的war安裝方式,可是此處兩種安裝方式都介紹。 瀏覽器
解壓nexus-2.4-bundle.zip 至任意目錄,如D:\dev_tools ,而後打開CMD,cd至目錄\nexus-2.4\bin\jsw\windows-x86-32 ,運行Nexus.bat 。你會看到Nexus的啓動日誌,當你看到「Started SelectChannelConnector@0.0.0.0:8081」以後,說明Nexus啓動成功了,而後打開瀏覽器,訪問 http://127.0.0.1:8081/nexus,你會看到以下的頁面: tomcat
要中止Nexus,Ctrl+C便可,此外InstallNexus.bat能夠用來將Nexus安裝成一個windows服務,其他的腳本則對應了啓動,中止,暫停,恢復,卸載Nexus服務。 服務器
你須要有一個能運行的web容器,這裏以Tomcat爲例首先咱們將下載的nexus-2.4.war 重命名爲nexus.war,而後複製到\apache-tomcat-6.0.18\webapps\nexus.war ,到\apache-tomcat-6.0.18\bin\ 目錄,運行startup.bat 。一切OK,如今能夠打開瀏覽器訪問http://127.0.0.1:8080/nexus,你會獲得和上圖同樣的界面。 app
默認狀況下,Maven依賴於中央倉庫,這是爲了能讓Maven開箱即用,但僅僅這麼作明顯是錯誤的,這會形成大量的時間及帶寬的浪費。既然文章的前面已經介紹瞭如何安裝和配置Nexus,如今咱們就要配置Maven來使用本地的Nexus,以節省時間和帶寬資源。 webapp
咱們能夠將Repository配置到POM中,但通常來講這不是很好的作法,緣由很簡單,你須要爲全部的Maven項目重複該配置。所以,這裏我將Repository的配置放到$user_home/.m2/settings.xml中: maven
<settings> ... <profiles> <profile> <id>local-nexus</id> <repositories> <repository> <id>local-nexus</id> <url>Nexus groups 地址,如: http://localhost:8090/nexus-2.4/content/groups/public/ </url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> </profile> </profiles> ********************* <activeProfiles> <activeProfile>local-nexus</activeProfile> </activeProfiles> ... </settings>
|
因爲咱們不能直接在settings.xml中插入<repositories>元素,這裏咱們編寫了一個profile,並添加了一 個profile並使用<activeProfile>元素自動將這個profile激活。這裏的local-nexus倉庫指向了剛纔咱們 配置的Nexus中「Public Repositories」倉庫組,也就是說,全部該倉庫組包含的倉庫都能供咱們使用。此外,咱們經過<releases> 和<snapshots>元素激活了Maven對於倉庫全部類型構件下載的支持,固然你也能夠調節該配置,好比說禁止Maven從Nexus 下載snapshot構件。
使用該配置,Maven就會從你的Nexus服務器下載構件了,速度和從Central下載可不是一個數量級的。
Nexus的工做目錄默認爲nexus-work=${user.home}/sonatype-work/nexus,在該目錄下面存儲有nexus的配置信息和下載的庫文件,所佔用的空間比較大,你們能夠按照需求修改。
1. 若是下載的是WAR包版,請修改:nexus-*\WEB-INF\plexus.properties這個目錄中的內容。使用WinRAR或者是其餘的解壓軟件打開nexus-*.war,將nexus-work修改成本身的目錄以後保存。
2. 若是下載的是內置Jetty版,請修改:(該方式未經驗證)
Ø start-nexus方式啓動
%Nexus_HOME%/conf/nexus.properties
nexus-work=${bundleBasedir}/../../sonatype-work/nexus
Ø console-nexus方式啓動
直接添加環境變量PLEXUS_NEXUS_WORK
建議:若是不建議有一個dos窗口的話,添加環境變量後,每次使用console-nexus的方式啓動,好處是每次升級Nexus後不用修改配置文件。
在上述配置方式中,Maven首先查找Nexus中的jar包,若是找不到則去中央倉庫下載。在此,咱們經過配置鏡像的方式阻止Maven下載中央工廠中的jar包,即若是Nexus中不存在jar包,則用戶就沒法得到該包。
具體配置爲:在$user_home/.m2/settings.xml中設置mirror便可。
<mirrors>
<mirror>
<id>nexusMirror</id>
<!--此處使用*匹配全部的倉庫,此爲推薦的配置方式-->
<mirrorOf>*</mirrorOf>
<name>本地鏡像</name>
<url>http://localhost:8090/nexus-2.4/content/groups/public/</url>
</mirror>
</mirrors>
如此,只有Nexus才能夠訪問中央倉庫。此時$user_home/.m2/settings.xml中profile中配置的repository已經無效。
Nexus提供了兩種方式來部署構件,你能夠從UI直接上傳,也能夠配置Maven部署構件。
有時候有個jar文件你沒法從公共Maven倉庫找到,可是你能從其它獲得這個jar文件(甚至是POM),那麼你徹底能夠將這個文件部署到Nexus中,使其成爲標準流程的一部分。步驟以下:
點擊左邊導航欄的"Repository",在右邊的倉庫列表中選擇一個倉庫,如「3rd Party」,而後會看到頁面下方有四個tab,選擇最後一個「Upload」,你會看到構件上傳界面。選擇你要上傳的構件,並指定POM,(或者手工編 寫GAV等信息),最後點擊Upload,該構件就直接被部署到了Nexus的"3rd Party"倉庫中。如圖:
更常見的用例是:團隊在開發一個項目的各個模塊,爲了讓本身開發的模塊可以快速讓其餘人使用,你會想要將snapshot版本的構件部署到Maven倉庫中,其餘人只須要在POM添加一個對於你開發模塊的依賴,就能隨時拿到最新的snapshot。
如下的pom.xml配置和settings.xml能讓你經過Maven自動化部署構件:
Pom.xml
<project> ... <distributionManagement> <repository> <id>nexus-releases</id> <name>Nexus Release Repository</name> <url>Nexus release 地址</url> </repository> <snapshotRepository> <id>nexus-snapshots</id> <name>Nexus Snapshot Repository</name> <url>Nexus snapshots地址</url> </snapshotRepository> </distributionManagement> ... </project>
|
Settings.xml
<settings> ... <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的用戶名和密碼。
而後,在項目目錄中執行deploy ,你會看到maven將項目構件部署到Nexus中,瀏覽Nexus對應的倉庫,就能夠看到剛纔部署的構件。當其餘人構建其項目時,Maven就會從Nexus尋找依賴並下載。
在浩大的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」,而後輸入類名便可,這裏我再也不贅述。