倉庫詳解

maven 項目

maven採用引用的方式將依賴的jar引入進來,不對真實的jar進行拷貝,但是打包的時候,運行需要用到的jar都會被拷貝到安裝包中。

Maven尋找依賴的jar

maven官方爲我們提供了一個站點,這個站點中存放了很多第三方常用的構建(jar、war、zip、pom等等),當我們需要使用這些構件時,只需將其座標加入到pom.xml中,此時maven會自動將這些構建下載到本地一個目錄,然後進行自動引用。

上面提到的maven站點,我們叫做maven中央倉庫,本地目錄叫做本地倉庫。

默認情況下,當項目中引入依賴的jar包時,maven先在本地倉庫檢索jar,若本地倉庫沒有,maven再去從中央倉庫尋找,然後從中央倉庫中將依賴的構件下載到本地倉庫,然後纔可以使用,如果2個地方都沒有,maven會報錯。

Maven 倉庫

在 Maven 中,任何一個依賴、插件或者項目構建的輸出,都可以稱之爲構件。

主要分爲2大類:

  • 本地倉庫
  • 遠程倉庫
    而遠程倉庫又分爲:中央倉庫、私服、其他公共遠程倉庫

如果我們使用~/.m2/settings.xml,而maven安裝目錄中的配置不動,升級的時候只需要替換一下安裝包就好了,所以我們建議將maven安裝目錄中的settings.xml拷貝到~/.m2中進行編輯,這個是用戶級別的,只會影響當前用戶.

本地倉庫

當我們使用maven的時候,依賴的構件都會從遠程倉庫下載到本地倉庫目錄中.

<localRepository>本地倉庫地址</localRepository>

遠程倉庫

當本地倉庫找不到構件時,可以去遠程倉庫找,然後放置到本地倉庫中進行使用。

中央倉庫

是maven內置的一個默認的遠程倉庫地址,不需要用戶去配置。

https://repo.maven.apache.org/maven2

中央倉庫還爲我們提供了一個檢索構件的站點:

https://search.maven.org/

搜索
g:org.springframework.boot
或
a:spring-boot-starter-test

私服

私服有以下好處:

  • 加速maven構件的下載速度
  • 節省寬帶
  • 方便部署自己的構件以供他人使用
  • 提高maven的穩定性,中央倉庫需要本機能夠訪問外網,而如果採用私服的方式,只需要本機可以訪問內網私服就可以了

其他遠程倉庫

中央倉庫是在國外的,訪問速度不是特別快,所以有很多比較大的公司做了一些好事,自己搭建了一些maven倉庫服務器,公開出來給其他開發者使用,比如像阿里、網易等等。

關於構件版本問題

在發佈穩定版本之前,會有很多個不穩定的測試版本,我們版本我們稱爲快照版本,用SNAPSHOT表示.

發佈一個穩定的版本,表示這個版本是穩定的,可以直接使用,這種穩定的版本我們叫做release版本。

Maven中遠程倉庫的配置

在項目的 pom.xml中配置遠程倉庫

	 <project>
	    <repositories>
	        <repository>
	            <id>aliyun-releases</id>
	            <url>https://maven.aliyun.com/repository/public</url>
	            <releases>
	                <enabled>true</enabled>
	            </releases>
	            <snapshots>
	                <enabled>false</enabled>
	            </snapshots>
	        </repository>
	    </repositories>
	</project>

在repositories元素下,可以使用repository子元素聲明一個或者多個遠程倉庫。

repository元素說明:

  • id:遠程倉庫的一個標識,中央倉庫的id是central,所以添加遠程倉庫的時候,id不要和中央倉庫的id重複,會把中央倉庫的覆蓋掉
  • url:遠程倉庫地址
  • releases:主要用來配置是否需要從這個遠程倉庫下載穩定版本構建
  • snapshots:主要用來配置是否需要從這個遠程倉庫下載快照版本構建

releases和snapshots中有個enabled屬性,是個boolean值,默認爲true,表示是否需要從這個遠程倉庫中下載穩定版本或者快照版本的構建,一般使用第三方的倉庫,都是下載穩定版本的構建。

Downloading from aliyun-releases: https://maven.aliyun.com/repository/public/org/springframework/boot/spring-boot-starter-web/2.2.1.RELEASE/spring-boot-starter-web-2.2.1.RELEASE.pom

輸出中有很多Downloaded from aliyun-releases,Downloaded from後面跟的aliyun-releases就是上面我們在pom.xml中配置的遠程倉庫repository元素中的id,後面還可以看到很多下載地址,這個地址就是我們上面在pom.xml中指定的遠程倉庫的地址,可以看到項目中依賴的構建從我們指定的遠程倉庫中下載了。

pom中配置遠程倉庫的方式只對當前項目起效

鏡像的方式

如果倉庫X可以提供倉庫Y存儲的所有內容,那麼就可以認爲X是Y的一個鏡像.

鏡像在settings.xml中進行配置,對所有使用該配置的maven項目起效,配置方式如下

<mirror>
  <id>mirrorId</id>
  <mirrorOf>repositoryId</mirrorOf>
  <name>Human Readable Name for this Mirror.</name>
  <url>http://my.repository.com/repo/path</url>
</mirror>

mirrors元素下面可以有多個mirror元素,每個mirror元素表示一個遠程鏡像,元素說明:

  • id:鏡像的id,是一個標識
  • name:鏡像的名稱,這個相當於一個描述信息,方便大家查看
  • url:鏡像對應的遠程倉庫的地址
  • mirrorOf:指定哪些遠程倉庫的id使用這個鏡像,這個對應pom.xml文件中repository元素的id,就是表示這個鏡像是給哪些pom.xml文件中的遠程倉庫使用的,這裏面需要列出遠程倉庫的id,多個之間用逗號隔開,*表示給所有遠程倉庫做鏡像

指定多個mirrors鏡像,鏡像只會執行第一個位置mirror
設置多個鏡像只會識別第一個鏡像下載jar包。配置的多個mirror可以都放着不影響,選取一個鏡像下載比較快的放在第一個就行。

配置mirrors 時
在這裏插入圖片描述
mirror就是鏡像,主要提供一個方便地切換遠程倉庫地址的途徑。比如,上班的時候在公司,用電信的網絡,連的是電信的倉庫。回到家後,是網通的網絡,我想連網通的倉庫,就可以通過mirror配置,統一把我工程裏的倉庫地址都改成聯通的,而不用到具體工程配置文件裏一個一個地改地址(即:<repository> 標籤中的url)。

這裏主要對mirrorOf再做一下說明,上面我們在項目中定義遠程倉庫的時候**,pom.xml文件的repository元素中有個id,這個id就是遠程倉庫的id,而mirrorOf就是用來配置哪些遠程倉庫會走這個鏡像去下載構件**

mirrorOf的配置有以下幾種

  • <mirrorOf>*</mirrorOf>
    匹配所有遠程倉庫id,這些遠程倉庫都會走這個鏡像下載構件。
    *的意思就是(根據mirrorOf和repository的id)匹配所有的庫(repository),這樣就是說如果你需要某個jar,他會從鏡像地址去下載這個jar。不管你配置了多少個庫,即使這些庫的地址不一樣,仍然會從鏡像地址訪問
  • <mirrorOf>遠程倉庫1的id,遠程倉庫2的id</mirrorOf>
    匹配指定的倉庫,這些指定的倉庫會走這個鏡像下載構件
  • <mirrorOf>*,! repo1</mirrorOf>
    匹配所有遠程倉庫,repo1除外,使用感嘆號將倉庫從匹配中移除
  • <mirrorOf>central</mirrorOf>
    表示當前鏡像爲遠程中央倉庫的鏡像,任何對於中央倉庫的請求都會轉至該鏡像
Downloading from mirror-aliyun-releases: https://maven.aliyun.com/repository/public/com/alibaba/fastjson/1.2.62/fastjson-1.2.62.pom

Downloaded from後面顯示的是mirror-aliyun-releases,這個和settings.xml中鏡像的id一致,表示我們配置的鏡像起效了.

maven 倉庫搜索地址

mvnrepository
maven

參考

倉庫詳解
mavne 官網手冊
mirrors和repository的關係區別

發佈了19 篇原創文章 · 獲贊 2 · 訪問量 1423
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章