使用Maven構建和管理項目是非常享受的一件事,我們可以從Maven中央倉庫下載所需要的構件(artifact),但實際開發中由於種種原因我們需要在架設一個Maven本地代理倉庫,如:不方便訪問公網、節省帶寬和時間、管理自家的共用artifact等等。本地地理倉庫是我自己取的名字,爲了不與下文的本地倉庫想混淆。
獲取構建的流程如下:用戶使用Maven構建項目時,首先是要直接從本地倉庫獲取的,如果本地倉庫沒有,它會根據setting.xml的設置去首先嚐試從遠程倉庫下載構件至本地倉庫,然後再使用本地倉庫的構件。如果setting.xml設置的遠程倉庫是本地代理倉庫,則本地代理倉庫先嚐試從自己的庫中獲取,如果沒有再從遠程倉庫(比如中央倉庫)下載構件至本地倉庫。
Nexus 是一個優秀的Maven倉庫管理器,還提供了強大的倉庫管理功能,構件搜索功能,它基於REST,友好的UI是一個extjs的REST客戶端,它佔用較少的內存,基於簡單文件系統而非數據庫。這些優點使其日趨成爲最流行的Maven倉庫管理器。本文就使用Nexus搭建一個本地代理倉庫。
下載和安裝
Nexus官方下載地址:http://www.sonatype.org/nexus/go,目前最新的版本是2.7.2。
Nexu安裝非常容易,因爲它內嵌了Jetty,只要有JRE救能直接運行。解壓Nexu包會得到兩個目錄nexus-2.7.2-03和sonatype-work,sonatype-work是默認倉庫目錄。運行、安裝都是使用nexus-2.7.2-03/bin/nexus.bat文件,它的使用方式:
進入bin目錄,然後: nexus.bat { console : start : stop : restart : install : uninstall }
其中console是控制檯方式運行,install是以windows service寄存,uninstall是下載windows service,start是運行windows service,stop是停止windows service,restart是重啓windows service,。
Nexus默認端口是8081,可以在nexus-2.7.1-01/conf/nexus.properties中修改,啓動後就可以通過地址:http://localhost/:8081/nexus 來訪問了。界面如下:
管理倉庫
管理倉庫需要先登錄,默認登錄用戶名/密碼是admin/admin123。登錄後就可以看到左欄菜單的管理項。
這裏,可以管理倉庫,配置Nexus系統,管理任務,管理用戶,角色,權限,查看系統的RSS源,管理及查看系統日誌,等等。
設置Nexus代理上公網
如果您的本地代理倉庫服務器沒有公網權限,Nexus爲你留了使用代理的路子,點擊右邊菜單的“Server”,在右邊找到:
添加你的代理服務器即可。
倉庫管理
點擊左邊導航欄的Repositories,界面的主面板會顯示所有一個所有倉庫及倉庫組的列表,你會看到它們的Type字段的值有group,hosted,proxy,virtual。這裏我們不關心virtual,只介紹下另外三種類型:如何管理、添加等操作,Nexus都寫的很清楚了,我就不一一贅述了。
hosted,本地代理倉庫,通常我們會部署自己的構件到這一類型的倉庫。
proxy,代理的遠程倉庫,它們被用來代理遠程的公共倉庫,如maven中央倉庫。
group,倉庫組,用來合併多個hosted/proxy倉庫,通常我們配置maven依賴倉庫組。
修改setting.xml配置Maven的倉庫
Maven安裝後默認的是使用中央倉庫,這是爲了能讓Maven開箱即用。而Maven缺省的本地倉庫地址爲${user.home}/.m2/repository。也就是說,一個用戶會對應的擁有一個本地倉庫。你也可以自定義本地倉庫的位置,修改${user.home}/.m2/settings.xml。
如果要配置應用先從nexus倉庫中尋找jar,找不到再到公共倉庫去找,則只需要在工程的pom文件中加入如下配置即可(推薦做法)
<repositories>
<repository>
<id>nexus</id>
<name>local private nexus</name>
<url>http://localhost:8081/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<name>local private nexus</name>
<url>http://localhost:8081/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
現在你就可以使用本地倉庫構建Maven項目了,踏上愉快的構建之旅!!
部署構件至Nexus
通過Nexus UI部署
有時候有個jar文件你無法從公共Maven倉庫找到,但是你能從其它得到這個jar文件(甚至是POM),那麼你完全可以將這個文件部署到Nexus中,使其成爲標準流程的一部分。步驟如下:
點擊左邊導航欄的"Repository",在右邊的倉庫列表中選擇一個倉庫,如“3rd Party”,然後在頁面下方的tab選擇“Artifact Upload Artifact(s)”,你會看到構件上傳界面。選擇你要上傳的構件,並指定POM,(或者手工編寫GAV等信息),最後點擊Upload,該構件就直接被部署到了Nexus的"3rd Party"倉庫中。
部署上傳之後,在工程的pom.xml中加入dependency, mvn install的時候即會先嚐試從nexus中下載所需要的依賴包。