構件:在maven中,任何一個依賴(jar包)、插件(maven-compiler-plugin-2.5.1.jar)或者項目輸出(前面例子中運作mvn clean install部署到本地倉庫的jar包)都稱為構件。
倉庫:maven在某一位置存儲所有共享的構件,這個統一的位置就是倉庫。
倉庫分類:maven倉庫分為本地倉庫和遠端倉庫
本地倉庫:在本地機器上緩存構件的檔案目錄(如前面例子中的D:\dev_env\maven)
安裝好maven後,本地倉庫目錄是不存在的。當使用者輸入第一條maven指令,maven才會建立本地倉庫
maven本地倉庫布局:(也可以說是jar包在本地倉庫中的路徑,此處隻是說明正常的布局)
maven是根據構件(jar包)的GAV屬性來定義構件存在的路徑的,例如某個構件的GAV屬性是
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-xjc</artifactId>
<version>2.2.6</version>
maven首先将groupid屬性值中的點号替換成檔案路徑分隔符 / ,根據上面的例子即為 com/sun/xml/bind ,然後加上artifactId,再加上version,最終路徑就是 com/sun/xml/bind/jaxb-xjc/2.2.6 ,是以構件存放的目錄就應該是本地倉庫目錄下的 com/sun/xml/bind/jaxb-xjc/2.2.6 目錄下。
遠端倉庫:包括中央倉庫、私服和其他公共庫
私服:是一種特殊的遠端倉庫,代理緩存遠端倉庫(可以是預設的中央倉庫、可以是第三方的公用倉庫)的構件。本地maven使用者需要下載下傳構件時,從私服請求。若私服中找不到構件,就從遠端倉庫(中央倉庫或其他公共庫)下載下傳,緩存在私服上,供使用者下次請求。 若一些無法從外部遠端倉庫下載下傳的構件,可以從本地上傳到私服上供maven使用者請求。
nexus私服的搭建和應用
nexus搭建:
1、下載下傳位址:http://www.sonatype.org/nexus/archived(win:zip包 linux :tar.gz)
2、将下載下傳後的zip包解壓縮,然後配置環境變量,在path變量後添加nexus的bin路徑(本地環境路徑為:D:\nexus-2.7.0-bundle\nexus-2.7.0-04\bin)
3、在控制台(cmd)下運作nexus install指令将nexus安裝到windows的服務中(可到系統的服務中檢視)
4、在控制台(cmd)下運作nexus start指令
5、在浏覽器中輸入http://ip:8081/nexus即可通路搭建的nexus私服(URL中的ip為本機ip)
nexus的預設端口是可以手動更改的(修改D:\nexus-2.7.0-bundle\nexus-2.7.0-04\conf\nexus.properties檔案中的application-port屬性值,重新開機nexus)
6、點選頁面右上角的log in,輸入使用者名(預設admin)和密碼(預設admin123)
nexus倉庫:
點選頁面左邊的Repositories可以在界面上顯示nexus下所有的倉庫
如下圖,根據type字段可以将倉庫分為:hosted、proxy、group、virtual
1、hosted的倉庫:内部項目的釋出倉庫(如前面例子中執行mvn clean install指令釋出項目,最終釋出的jar包回放入hosted倉庫)
3rd party倉庫存儲使用者手動上傳的構件,這些構件不能從中央倉庫下載下傳,在倉庫的Artifact Upload頁簽中可以執行
2、proxy的倉庫:從遠端中央倉庫中尋找資料的倉庫(可以點選對應的倉庫的Configuration頁簽下Remote Storage Location屬性的值即被代理的遠端倉庫的路徑)
3、group倉庫:組倉庫用來友善開發人員進行設定的倉庫
group倉庫可以自由組合其他的倉庫為一個組,然後在項目的pom檔案的repository可以配置這個倉庫
nexus倉庫設定:
1、更新私有倉庫索引
點選Repository名稱為Central,type為proxy的倉庫,在頁面下方的Configuration頁,把 Download Remote Indexes的值改為True,然後點選最下面的save按鈕。(更新索引的時間有點長,請耐心等待。更新完索引後可在Browse Index頁簽點選重新整理按鈕就可顯示所有更新後的索引,展開索引樹,點選到葉子節點--依賴jar包,可檢視其依賴配置坐标。)
可以在頁面左上角的Artifact Search搜尋框中輸入要搜尋的依賴(如:spring),就會顯示搜尋到的依賴配置坐标。
由于自動更新索引時間較長,也可以手動下載下傳包含索引檔案的壓縮包nexus-maven-repository-index.zip,然後放入Central倉庫索引存儲的目錄(本地路徑為D:\nexus-2.7.0-bundle\sonatype-work\nexus\indexer\central-ctx ,這種方式未經驗證,壓縮包下載下傳失敗,第一種自動更新可以成功)。
2、配置鏡像
修改本地倉庫的配置檔案D:\dev_env\maven\settings.xml,在mirrors節點下添加如下配置
<mirror>
<id>central</id>
<mirrorOf>*</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://192.168.19.38:8081/nexus/content/groups/public/</url>
</mirror>
mirrorOf配置為*,表示這個鏡像配置适用于所有的倉庫,是所有倉庫的一個鏡像,maven無論要去那個倉庫下載下傳建構都會跳轉到鏡像URL(此時配置的是nexus的group類型的倉庫位址,該組倉庫包含了其他幾個類型的倉庫,可以點選這個倉庫,檢視其Configuration頁簽)去下載下傳。
mirrorOf也可以配置一個或多個倉庫,多個倉庫配置值要與對應的倉庫id一緻,以逗号分隔。
項目的釋出:
1、配置釋出倉庫路徑
在user-parent的pom檔案的project節點下添加項目釋出倉庫資訊。snapshotRepository配置快照版本釋出倉庫路徑(由于使用的例子定義的都是快照版本,是以項目都會釋出到user-snapshots這個倉庫中,對應的是nexus上與配置URL比對的倉庫);repository配置release版本釋出倉庫路徑。url屬性定義最終釋出到的nexus倉庫路徑。
<distributionManagement>
<snapshotRepository>
<id>user-snapshots</id>
<name>User Project SNAPSHOTS</name>
<url>http://192.168.19.38:8081/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
<repository>
<id>user-releases</id>
<name>User Project Release</name>
<url>http://192.168.19.38:8081/nexus/content/repositories/releases/</url>
</repository>
</distributionManagement>
2、授權
項目釋出的時候需要配置一個有釋出權限的使用者(nexus有個預設的使用者deployment,預設密碼deployment123),nexus倉庫會鑒權,修改本地倉庫的配置檔案D:\dev_env\maven\settings.xml,在servers節點下添加如下配置
<server>
<id>user-snapshots</id>
<username>deployment</username>
<password>deployment123</password>
</server>
<server>
<id>user-releases</id>
<username>deployment</username>
<password>deployment123</password>
</server>
3、釋出
在springsource中導入user-parent及其子項目,運作user-parent下的pom檔案 clean deploy
釋出成功後可以到<url>http://192.168.19.38:8081/nexus/content/repositories/snapshots/</url>對應的nexus倉庫的Browse Storage頁簽下檢視,會顯示所有項目的jar包
可下載下傳項目示例:http://download.csdn.net/detail/liuxigiant/6691645
示例出自視訊教程的maven第二部分,視訊下載下傳路徑http://www.verycd.com/topics/2917293/