Nexus是一個強大的Maven倉庫管理器,它極大地簡化了本身內部倉庫的維護和外部倉庫的訪問。利用Nexus你能夠只在一個地方就可以徹底控制訪問和部署在你所維護倉庫中的每一個Artifact。Nexus是一套「開箱即用」的系統不須要數據庫,它使用文件系統加Lucene來組織數據。Nexus 使用ExtJS來開發界面,利用Restlet來提供完整的REST APIs,經過m2eclipse與Eclipse集成使用。Nexus支持WebDAV與LDAP安全身份認證。 spring
來自<http://www.oschina.net/p/nexus> 數據庫
Nexus有兩種安裝包,一種是包含Jetty容器的Bundle包,另外一種是不包含Web容器的war包。咱們能夠從http://www.sonatype.org/downloads/nexus-latest-bundle.zip下載最新版本的Nexus的Bundle包。 apache
解壓nexus-latest-bundle.zip,會發現有兩個文件夾。如圖1: windows
圖1 瀏覽器
nexus-2.7.2-03目錄包含了Nexus運行所須要的文件。是Nexus運行必須的。 緩存
sonatype-work目錄包含Nexus生成的配置文件、日誌文件、倉庫文件等。當咱們須要備份Nexus的時候默認備份此目錄便可。 安全
進入目錄nexus-2.7.2-03\bin\jsw,你會發現有不少的安裝環境。個人操做系統是64位的Windows 8,那麼進入windows-x86-64目錄。有如下文件,如圖2: eclipse
圖2 maven
install-nexus.bat:將Nexus服務安裝到Windows系統。 url
start-nexus.bat:啓動Nexus服務。
stop-nexus.bat:中止Nexus服務。
uninstall-nexus.bat:卸載Nexus服務。
右擊install-nexus.bat「以管理員身份運行」運行文件,右擊start-nexus.bat「以管理員身份運行」運行文件。在「服務」中,咱們能夠看到Nexus已經安裝而且運行起來了,圖3:
圖3
安裝以前要先安裝JDK,並在環境變量中配置JAVA_HOME和PATH。
在瀏覽器中輸入:http://localhost:8081/nexus/獲得如下界面,見圖4:
圖4
單擊右上角的「Log In」按鈕進行登陸,Nexus的默認管理員帳戶密碼爲admin/admin123。
Nexus包含了各類類型的倉庫類型。在登陸後的Nexus界面,單擊左邊的「Repositories」連接,能夠看到圖5所示:
圖5
咱們能夠從上圖中看到四種倉庫類型:group(倉庫組)、hosted(宿主)、proxy(代理)和virtual(虛擬)。其中每種類型的Format有Maven1或者Maven2,這裏咱們不看Maven1的。倉庫的Policy(策略)表示該倉庫爲發佈(Release)版本仍是快照(Snapshot)版本倉庫。
在圖5中,Nexus列出了默認的幾個倉庫:
Public Repositories:倉庫組,將全部策略爲Release的倉庫聚合並經過一致的地址提供服務。
3rd party:一個策略爲Release的宿主類型倉庫,用來部署沒法從公共倉庫得到的第三方發佈版本構件。
Apache Snapshots:策略爲Snapshots的代理倉庫,用來代理Apache Maven倉庫的快照版本構件。
Central:該倉庫代理Maven的中央倉庫,策略爲Release,只會下載和緩存中央倉庫中的發佈版本構件。
Central M1 shadow:maven1格式的虛擬類型倉庫。
Codehaus Snapshots:代理Codehaus Maven倉庫快照版本的代理倉庫。
Release:策略爲Release的宿主類型倉庫,用來部署組織內部的發佈版本構件。
Snapshots:策略爲Snapshots的宿主類型倉庫,用來部署組織內部的快照版本構件。
用《Maven實戰》中一張圖來解釋下倉庫的分類:
圖6
點擊圖5中列表上的「Public Repositories」行,在下方的「Configuration」中咱們能夠看到,在「Ordered Group Repositories」中包含了Release、Snapshots、3rd party、Central等倉庫。
爲了構建Nexus的Maven中央庫索引,首先須要設置Nexus中Maven Cencal代理倉庫下載遠程索引,將「Download Remote Indexes」的值從默認值false改成true。如圖7:
圖7
點擊「Save」後,點擊左邊的「Scheduled Tasks」連接,會出現圖8界面,說明Nexus後臺在下載Maven中央倉庫的索引。
圖8
若是沒有出現圖8界面,那麼要在「Public Repositories」行右擊,點擊「Update Index」。
圖9
在「Repositories」界面中,選擇Browse Index選項卡,能夠看到Maven中央倉庫內容的樹形結構,如圖10。
圖10
若是仍是構建不成功,參考:http://blog.csdn.net/mtkong/article/details/9377605
http://397013586.iteye.com/blog/1558492
在左邊的搜索框中輸入「spring」關鍵字,會出現一大堆與spring相關的結果。
若是要對宿主倉庫和代理倉庫創建索引。只須要在對應的倉庫上右擊,從彈出的快捷菜單中選擇「ReIndex」便可。
在上面的基礎上,咱們能夠用Nexus私服了。有2種方式:
<repositories> <repository> <id>local_nexus</id> <name>local_nexus</name> <url>http://localhost:8081/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>local_nexus</id> <name>local_nexus</name> <url>http://localhost:8081/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> </pluginRepositories>
這樣的配置只對當前的Maven項目有效。可是,實際的項目開發中,咱們都想着一次配置就能讓本機的全部Maven項目都使用Maven私服,那麼咱們就要用到下面的方法。
Maven提供的profile是一組可選的配置,能夠用來設置或者覆蓋配置默認值。有了profile,你就能夠爲不一樣的環境定製構建。那麼在settings.xml中加入如下代碼:
<settings> ... <profiles> <profile> <id>local_nexus</id> <repositories> <repository> <id>local_nexus</id> <name>local_nexus</name> <url>http://localhost:8081/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>local_nexus</id> <name>local_nexus</name> <url>http://localhost:8081/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> </pluginRepositories> </profile> </profiles> <activeProfiles> <activeProfile>local_nexus</activeProfile> </activeProfiles> ... </settings>
上面的配置中,使用了一個id爲local_nexus的profile,這個profile包含了相關的倉庫配置,同時配置中又使用了activeProfiles元素將nexus這個profile激活,這樣當執行Maven構建的時候,激活的profile會將倉庫配置應用到項目中去。
經過上面的配置,咱們會發現Maven除了從Nexus下載構件外還會從中央倉庫下載構件構件。既然是私服,那麼咱們就只但願Maven下載請求都僅僅經過Nexus。咱們能夠經過鏡像實現這一需求。能夠建立一個匹配任何倉庫的鏡像,鏡像的地址是私服,這樣Maven對任何倉庫的構件下載請求都會轉到私服中。把上面的配置修改成以下配置:
<settings> ... <mirrors> <mirror> <id>local_mirror</id> <mirrorOf>*</mirrorOf> <name>local_mirror</name> <url>http://localhost:8081/nexus/content/groups/public/</url> </mirror> </mirrors> <profiles> <profile> <id>local_nexus</id> <repositories> <repository> <id>local_nexus</id> <name>local_nexus</name> <url>http://localhost:8081/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> <repository> <id>central</id> <!--因爲配置過鏡像,這個url不起做用--> <url>http://repo.maven.apache.org/maven2</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>local_nexus</id> <name>local_nexus</name> <url>http://localhost:8081/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> <pluginRepository> <id>central</id> <url>http://repo.maven.apache.org/maven2</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> </pluginRepositories> </profile> </profiles> <activeProfiles> <activeProfile>local_nexus</activeProfile> </activeProfiles> ... </settings>
平常開發的快照版本部署到Nexus中策略爲Snapshot的宿主倉庫中,正式項目部署到策略爲Release的宿主倉庫中,POM的配置方式以下:
... <distributionManagement> <repository> <id>local_nexus_releases</id> <name>core Release Repository</name> <url>http://localhost:8081/nexus/content/repositories/releases/</url> </repository> <snapshotRepository> <id>local_nexus_snapshots</id> <name>core Snapshots Repository</name> <url>http://localhost:8081/nexus/content/repositories/snapshots/</url> </snapshotRepository> </distributionManagement> ...
Nexus的倉庫對於匿名用戶只是只讀的。爲了可以部署構件,咱們還須要再settings.xml中配置驗證信息:
... <servers> <server> <id>local_nexus_releases</id> <username>admin</username> <password>admin123</password> </server> <server> <id>local_nexus_snapshots</id> <username>admin</username> <password>admin123</password> </server> </servers> ...
其中,驗證信息中service的id應該與POM中repository的id一致。
咱們除了本身的構件要部署到Nexus私服上外,咱們有可能還要將第三方構件(如:SQLService的JDBC)部署到Nexus上。這個時候,在Nexus界面上選擇一個宿主倉庫(如3rd party),再在頁面下方選擇Artifact Upload選項卡。填寫對應的Maven座標。而後點擊「Select Artifact(s) for Upload」按鈕從本機選擇要上傳的構件,而後點擊「Add Artifact」按鈕將其加入到上傳列表中。最後,單擊頁面底部的「Upload Artifact(s)」按鈕將構件上傳到倉庫中。