倉庫管理軟件:
私服不是Maven的核心概念,它僅僅是一種衍生出來的特殊的Maven倉庫
有三種專門的Maven倉庫管理軟件能夠用來幫助你們創建私服:
Apache基金會的Archiva、JFrog的Artifacotory和Sonatype的Nexus,Archiva是開源的,Artifacotory和Nexus的核心也是開源的 html
Nexus分爲開源版和專業版,開源版本基本GPLv3許可證,其特性足以知足大部分Maven用戶的須要,特性以下:
較小的內存佔用(最少僅爲28MB)
基於ExtJS的友好界面
基於Restlet的徹底REST API
支持代理倉庫、宿主倉庫和倉庫組
基於文件系統、不須要數據庫
支持倉庫索引和搜索
支持從界面上傳Maven構件
細粒度的安全控制 java
Nexus專業版本是須要付費購買的,對開源版本多以下特性:
一些專業安全控制
發佈流程控制等須要的特性 linux
安裝Nexus
Nexus是典型的JavaWeb應用,它有兩種安裝包:包含jetty容器的Bundle包,不包含Web容器的war包
解壓後直接運行便可 web
解決壓包含以下兩個目錄:
nexus-webapp-xxx:該目錄包含了Nexus運行所須要的文件,如啓動腳本、依賴jar包等
sonatype-work:該目錄包含Nexus生成的配置文件、日誌文件、倉庫文件等 正則表達式
其中,第一個目錄是運行Nexus所必需的,並且全部相同版本的Nexus實例所包含的該目錄內容都是同樣的。
第二個目錄不是必須的,是在運行的時候動態建立的
因此須要備份Nexus的時候,默認備份sonatype-work目錄就能夠。 spring
在linux下面安裝
WARNING - NOT RECOMMENDED TO RUN AS ROOT
****************************************
If you insist running as root, then set the environment variable RUN_AS_USER=root before running this script 數據庫
在172.168.27.70服務器上操做
root用戶操做(建立maven用戶並賦權限)
groupadd -g 1000 maven
useradd -d /opt/maven/ -g 1000 maven
chown -R maven:maven /opt/maven
passwd maven
su - maven
上傳至/opt/maven目錄
unzip nexus-2.3.0-04-bundle.zip
ln -s nexus-2.3.0-04 nexus
cd nexus/bin
./nexus start apache
設置環境變量
vi .bashrc
增長以下內容:
export NEXUS_HOME=/opt/maven/nexus-2.3.0-04
export PATH=$PATH:$NEXUS_HOME/bin 瀏覽器
便可在任何目錄運行nexus命令,如
nexus start 緩存
Usage: /opt/maven/nexus-2.3.0-04/bin/nexus { console | start | stop | restart | status | dump }
用admin帳號登陸nexus(建議採用firefox登陸,展現效果較好,在其餘瀏覽器兼容器很差)
admin/admin123
deployment/deployment123
添加以下遠程倉庫:
https://repository.apache.org/content/repositories/releases/
http://repository.apache.org/snapshots/
http://repo1.maven.org/maven2/
http://nexus.codehaus.org/snapshots/
http://download.java.net/maven/2/
http://repository.jboss.org/maven2/
https://repository.sonatype.org/content/groups/forge/
alibaba
http://code.alibabatech.com/mvn/releases
cloudera
https://repository.cloudera.com/artifactory/cloudera-repos
http://mvnrepo.code.taobao.org/nexus/content/repositories/releases/
配置時勾選:Download Remote Indexes,這樣nexus自動啓動定時任務Scheduled Tasks下載索引
默認Central是沒有勾選Download Remote Indexes,能夠修改Central的配置,下載中央倉庫的索引
並在倉庫組 Public Repositories中按如下順序增長以上4個遠程倉庫
Sonatype Forge、Apache Releases、JBOSS Releases、JAVA NET
登陸Nexus
Nexus的默認管理員用戶名和密碼爲admin/catt2013
Nexus的倉庫和倉庫組
倉庫有4種類型
group(倉庫組)、hosted(宿主)、proxy(代理)、virtual(虛擬)
虛擬類型倉庫的做用其實是動態地將倉庫內容格式轉換,即也是爲了服務maven1格式
Nexus內置的倉庫
Maven Central: 代理Maven中央倉庫
Releases: 一個策略爲Release的宿主類型倉庫,用來部署組織內部的發佈版本構件
Snapshots: 一個策略爲Snapshot的宿主類型倉庫,用來部署組織內部的快照版本構件
3rd party: 一個策略爲Release的宿主類型倉庫,用來部署沒法從公共倉庫得到的第三方發佈版本構件
Apache Snapshots: 一個策略爲Snapshot的代理倉庫,用來代理Apache Maven倉庫的快照版本構件
Codehaus Snapshots: 一個策略爲Snapshot的代理倉庫,用來代理Codehaus Maven倉庫的快照版本構件
Google Code: 一個策略爲Release的代理倉庫,用來代理Google Code Maven倉庫的發佈版本構件
java.net - Maven 2:一個策略爲Release的代理倉庫,用來代理java.net Maven倉庫的發佈版本構件
Public Repositories:該倉庫組將上述全部策略爲Release的倉庫聚合並經過一致的地址提供服務
Public Snapshot Repositories:該倉庫組將上述全部策略爲Snapshot的倉庫聚合並經過一致的地址提供服務
倉庫分類的概念
Maven能夠直接從宿主倉庫下載構件;也能夠從代理倉庫下載構件,
而代理倉庫會間接地從遠程倉庫下載並緩存構件;最後,爲了方便,能夠從
倉庫組下載構件,而倉庫組沒有實際內容(圖中用虛線表示),它會轉向其包含
的宿主倉庫或代理倉庫得到實際構件的內容
Nexus的索引與構件搜索
Nexus經過維護倉庫的索引來提供搜索功能,能在很大程度上方便Maven用戶定位構件座標
爲了可以搜索Maven中央倉庫,首先須要設置Nexus中的Maven Central代理倉庫下載遠程索引,須要注意的是:
這上配置的值默認是關閉的,此外,因爲中央倉庫的內容比較多,所以其索引文件比較大,Nexus下載該文件也須要比較
長的時間。
提供的搜索方式以下:
關鍵字搜索:
GAV搜索:容許用戶經過設置GroupId、ArtifactId、Version等信息來進行更有針對性的搜索
類名搜索:容許用戶搜索包含某個JAVA類的構件
校驗搜索:(checksum Search) 容許用戶使用構件的校驗(如經過spring-core-3.0.6.RELEASE.jar.sha1的內容)進行搜索
有了中央倉庫的索引,用戶不只可以搜索構件,還可以直接瀏覽中央倉庫的內容。即Nexus的索引瀏覽功能。在Repositories頁面中,
選擇Browse Index選項卡,就能看到中央倉庫內容的樹形結構。
以上的索引及瀏覽功能都是基於Nexus索引而實現的,確切的應該稱之爲nexus-indexer
Nexus可以遍歷一個Maven倉庫全部的內容,蒐集它們的座標、校驗和所含的JAVA類信息,而後以nexus-indexer的形式保存起來。
中央倉庫維護了這樣的一個nexus-indexer,所以本地的Nexus下載到這個索引以後,就能在此基礎上提供搜索和瀏覽等服務。
注意:不是任何一個公共倉庫都提供nexus-indexer,對於那些不提供索引的倉庫來講,沒法對其進行搜索。
配置Maven從Nexus下載構件
在POM中爲Maven配置倉庫和插件倉庫,這樣的配置只對當前Maven項目有效,在實際應用中,須要在settings.xml中配置。
這樣對全部本機Maven項目有效。可是settings。xml並不支持直接配置repositories和pluginRepositories,
能夠經過Profile機制進行配置
<profiles>
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>nexus</id>
<name>nexus repository</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>nexus</id>
<name>nexus repository</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>nexus</activeProfile>
</activeProfiles>
這樣的配置已經能讓本機全部的Maven項目從Nexus私服下載構件,但還會不時地訪問中央倉庫central
若是但願全部Maven下載請求都經過Nexus,以全面發揮私服的做用,就須要配置鏡像。
<mirrors>
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://localhost:8081/nexus/content/groups/public/</url>
</mirror>
</mirrors>
部署構件至Nexus
宿主倉庫的主要做用是存儲組織內部的,或者一些沒法從公共倉庫中得到的第三方構件,供項目項目使用。
用戶能夠配置Maven自動部署構件至Nexus的宿主倉庫,也能夠經過界面手工上傳構件
使用Maven部署構件至Nexus(在所在項目的pom.xml中配置)
<distributionManagement>
<repository>
<id>nexus-releases</id>
<name>Nexus Releases Repository</name>
<url>http://localhost:8081/nexus/content/repositories/releases/</url>
</repository>
<snapshotRepository>
<id>nexus-snapshots</id>
<name>Nexus Snapshots Repository</name>
<url>http://localhost:8081/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>
Nexus的倉庫對於匿名用戶是隻讀的,爲了可以部署構件,須要在settings.xml中配置認證信息
<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>
手工部署第三方構件至Nexus
針對因爲許可證的因素沒法公共地放在公共倉庫中,還有大量的小型項目,沒有把本身的構件分發到中央倉庫,能夠手工下載到本地,
而後經過Nexus的界面上傳到私服中。
上傳第三方構件,上傳至3rd party宿主倉庫
Nexus的權限管理
訪問控制模型
Nexus是基於權限(privilege)作訪問控制的,服務器的每個資源都有相應的權限來控制。所以用戶執行特定的操做時就必須有必要的權限。
Nexus預約義的三個用戶,這三個用戶對應了三個權限級別:
admin/admin123:擁有對nexus服務的徹底控制
deployment/deployment123:可以訪問nexus,瀏覽倉庫內容、搜索、而且上傳部署構件,但沒法對Nexus進行任何配置
anonymous:對應了全部未登陸的匿名用戶,能夠瀏覽倉庫並進行搜索。
爲項目分配獨立的倉庫
爲每一個項目分配獨立的倉庫,而且只將倉庫的部署、修改、和刪除權限賦予該項目成員,其餘用戶只能讀取、下載和搜索該倉庫的內容。
有了倉庫以後,就須要建立基於倉庫的增、刪、改、查權限,在Nexus中,這樣的權限是基於Repository Target創建的,
Repository Target其實是一系列表達式,在訪問倉庫某路徑下面的內容的時候,Nexus會將倉庫路徑與Repository Target的
正則表達式一一匹配,以檢查權限是否正確。
先創建Repository Target,而後根據Repository Target創建對應的privileges, 創建包含如上權限的角色,
根據須要將其分配給項目的團隊成員。
Nexus的調度任務 Nexus提供了一系列可配置的調度任務來方便用戶管理系統。