maven repository


保存構件的地方即為repository(倉庫)。

倉庫的分類

maven倉庫分為兩類:本地倉庫和遠程倉庫。

當maven根據pom中定義的坐標尋找構件時,首先在本地倉庫中尋找,當找不到時再從遠程倉庫尋找,都找不到時拋出異常。

maven遠程倉庫還可進一步分類:

 

本地倉庫

默認maven會在c盤創建一個.m2的本地倉庫,如果要修改本地倉庫地址,可以修改setting.xml文件:

<settings>
  <localRepository>D:\64\m2\repository</localRepository>
</settings>

 

遠程倉庫

中央倉庫

使用解壓軟件打開%M2_HOME%/lib/maven-model-builder-3.1.1.jar,然后訪問路徑org/apache/maven/model/pom-4.0.0.xml,可看到:

<repositories>
  <repository>
      <id>central</id>
      <name>Central Repository</name>
      <url>http://repo.maven.apache.org/maven2</url>
      <layout>default</layout>
      <snapshots>
          <enabled>false</enabled>
      </snapshots>
  </repository>
</repositories>

 

包含這段配置的文件是所有maven項目都會繼承的超級pom。上述配置中,snapshots子元素enabled的值為false,表示不從中央倉庫下載快照版本的構件。

私服

私服是一種特殊的遠程倉庫,架設於局域網內。當maven需要下載構件時,先從私服尋找,私服中沒有再從外部倉庫下載。

私服有許多顯著的優點:

■ 節省外網帶寬

■ 加速maven構件

■ 部署第三方構件

■ 提高穩定性,增強控制

■ 降低中央倉庫的負荷

遠程倉庫配置

如果默認的遠程中央倉庫無法滿足需求,我們可以在pom中添加遠程倉庫的配置:

<project>
  ...
  <repositories>
      <repository>
          <id>jboss</id>
          <name>JBoss Repository</name>
          <url>http://repository.jboss.com/maven2/</url>
          <releases>
              <enabled>true</enabled>
          </releases>
          <snapshots>
              <enabled>false</enabled>
          </snapshots>
          <layout>default</layout>
      </repository>
  </repositories>
</project>

 

在repositories元素下,使用repository元素聲明一個或多個遠程倉庫。上面的xml聲明了一個id為jboss,名稱為JBoss Repository的倉庫。

任何一個倉庫的id是唯一的,maven自帶的中央倉庫使用的id為central,如果其他倉庫的id也為central,那么它將覆蓋自帶的中央倉庫。

url指向倉庫地址,一般該地址都是基於http協議。releases的enabled值為true,表示開啟JBoss倉庫的發布版本下載支持,snapshots的enabled值為false,表示關閉JBoss倉庫的快照版本的下載支持。

release和snapshots元素還可以配置另外兩個子元素:

<snapshots>
  <enabled>true</enabled>
  <updatePolicy>daily</updatePolicy>
  <checksumPolicy>ignore</checksumPolicy>
</snapshots>

 

updatePolicy元素配置maven從遠程倉庫檢查更新的頻率,默認值為daily。其他可用值有:never —— 從不檢查更新,always —— 每次構建都檢查更新,interval:X —— 每隔X分鍾檢查一次更新。用戶也可以使用命令 mvn clean install -U強制更新。

checksumPolicy元素用來配置當下載構件時,maven檢驗和驗證失敗時候的動作,默認為warn,即輸出警告信息,ignore則為忽略錯誤。

遠程倉庫認證

如果遠程倉庫出於安全的考慮設置了用戶名和密碼,這時候我們必須在settings.xml中配置:

<settings>
  ...
  <servers>
      <server>
          <id>my-proj</id>
          <username>repo-user</username>
          <password>repo_pwd</password>
      </server>
  </servers>
</settings>

 

上述xml指定了id為my-proj的遠程倉庫的用戶名和密碼。

部署至遠程倉庫

如前所述,私服一大作用是可以部署第三方構件。無論是開發中生成的構件還是正式發布的構件,都需要部署到私服中供小組中的其他開發人員使用,在maven項目pom中配置:

<project>
  ...
  <distributionManagement>
      <snapshotRepository>
          <id>user-snapshot</id>
          <name>User Porject Snapshot</name>
          <url>http://192.168.10.217:8081/nexus/
                  content/repositories/snapshots/</url>
          <uniqueVersion>true</uniqueVersion>
      </snapshotRepository>
      <repository>
          <id>user-release</id>
          <name>User Porject Release</name>
          <url>http://192.168.10.217:8081/nexus/
                  content/repositories/releases/</url>
      </repository>
  </distributionManagement>
</project>

 

上述xml明確指定了快照版本和發行版本的私服id和地址,如前所述,如果私服設置了賬號密碼,則應該在settings.xml中設置對應id的私服賬號和密碼,就本例來說,我們應該在settings.xml中設置:

<settings>
  <servers>
      <server>
          <id>user-release</id>
          <username>deployment</username>
          <password>deployment123</password>
      </server>
      <server>
          <id>user-snapshot</id>
          <username>deployment</username>
          <password>deployment123</password>
      </server>
  </servers>
</settings>

 

配置正確后,可以運行命令mvn clean deploy將項目構建輸出的構件部署到對應的遠程倉庫。

快照版本

版本元素version中添加SNAPSHOT標識,表明該構件為快照版本。SNAPSHOT版本的構件發布到私服的過程中,maven會自動加上時間戳。另一位開發者從該私服獲取這個構件的時候,maven會自動獲取時間戳最新的構件。

快照版本只應該在組織內部依賴使用,項目不應該依賴於任何組織外部的快照版本依賴。因為快照版本的不穩定性會對項目造成潛在的危險。

鏡像

如果倉庫B可以提供倉庫A存儲的所有內容,那么就可以認為B是A的一個鏡像。maven默認的遠程中央倉庫由於服務器不在中國,所以訪問速度可能會慢些,這時候可以再settings.xml中配置一個鏡像:

<settings>
  ...
  <mirrors>
      <mirror>
          <id>maven.net.cn</id>
          <name>one of the central mirrors in china</name>
          <url>http://maven.net.cn/content/groups/public</url>
          <mirrorOf>central</mirrorOf>
      </mirror>
  </mirrors>
</settings>

 

<mirrorOf>的值為central,表示該配置為中央倉庫的鏡像。任何對於中央倉庫的請求都會本轉至該鏡像。

鏡像常用於私服。由於私服可以代理任何外部的公共倉庫,所以可以說私服就是所有倉庫的鏡像。如:

<settings>
  ...
  <mirrors>
      <mirror>
          <id>nexus</id>
          <mirrorOf>*</mirrorOf>
          <url>http://192.168.10.217:8081/nexus/content/groups/public/</url>
      </mirror>
</mirrors>
</settings>

 

<mirrorOf>的值為*號,表示http://192.168.10.217:8081/nexus/content/groups/public/是所有外部倉庫的鏡像。任何對遠程倉庫的請求都會被轉到這個地址。

<mirrorOf>的配置:

<mirrorOf>*<mirrorOf>:匹配所有的遠程倉庫

<mirrorOf>external:*<mirrorOf>:匹配所有不在本機上的遠程倉庫

<mirrorOf>repo1,repo2<mirrorOf>:匹配倉庫repo1和repo2

<mirrorOf>*,!repo1<mirrorOf>:匹配除了repo1之外的所有遠程倉庫

鏡像倉庫完全屏蔽了被鏡像倉庫,當鏡像倉庫停止服務的時候,maven仍無法訪問被鏡像倉庫,因而將無法下載構建。

倉庫搜索服務

下面列出幾個目前能用的maven坐標服務:

1.The Centrl Repository:http://search.maven.org/

2.Maven Repository:http://www.mvnrepository.com/

3.Nexus Repository Manager:https://repository.sonatype.org/#welcome

《Maven實戰》讀書筆記


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM