https://blog.csdn.net/u010811939/article/details/81110920
詳解maven的setting配置文件中mirror和repository的區別
https://www.jb51.net/article/152935.htm
1 倉庫
- 本地倉庫(.m2)
- 遠程倉庫(聯網)
- 遠程倉庫(私服)
- 使用鏡像
1.1 本地倉庫(.m2)
運行原理
運行Maven的時候,Maven所需要的任何構件都是直接從本地倉庫獲取的。如果本地倉庫沒有,它會首先嚐試從遠程倉庫下載構件至本地倉庫,然後再使用本地倉庫的構件。
示例說明
你的項目配置了junit-3.8的依賴,在你運行mvn test 的時候,Maven需要使用junit-3.8的jar文件,它首先根據座標查找本地倉庫,如果找到,就直接使用。如果沒有,Maven會檢查可用的遠程倉庫配置,然後逐個嘗試這些遠程倉庫去下載junit-3.8的jar文件,如果遠程倉庫存在該文件,Maven會將其下載到本地倉庫中,繼而使用。如果嘗試過所有遠程倉庫之後,Maven還是沒能夠下載到該文件,它就會報錯。
倉庫位置
1. 默認倉庫的存儲位置:
Maven缺省的本地倉庫路徑爲${user.home}/.m2/repository
2. 自定義修改倉庫的存儲位置:
可改變默認的 .m2 目錄下的默認本地存儲庫文件夾
通過修改${user.home}/.m2/settings.xml 配置本地倉庫路徑 ,沒有settings這個xml文件就新建,或者如下複製個;具體看圖:
<span style="color:#000000"><code><!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository-->
<localRepository>D:/.m2/repository</localRepository>
</code></span>
- 1
- 2
- 3
- 4
- 5
3. 運行時指定本地倉庫位置:
mvn clean install -Dmaven.repo.local=/home/juven/myrepo/
還有一點需要理解的是,當我們運行install的時候,Maven實際上是將項目生成的構件安裝到了本地倉庫,也就是說,只有install了之後,其它項目才能使用此項目生成的構件。
遠程倉庫(聯網)
接着瞭解一下Maven缺省的遠程倉庫,即Maven中央倉庫:
運行原理
安裝好Maven之後,我們可以建立一個簡單的項目,配置一些簡單的依賴,然後運行mvn clean install,項目就構建好了。我們沒有手工的去下載任何jar文件,這一切都是因爲Maven中央倉庫的存在,當Maven在本地倉庫找不到需要的jar文件時,它會查找遠程倉庫,而一個原始的Maven安裝就自帶了一個遠程倉庫——Maven中央倉庫。
倉庫位置
這個Maven中央倉庫是在哪裏定義的呢?
- maven-2.xxx,可以找到這個文件:${M2_HOME}/lib/maven-2.0.10-uber.jar;
- maven-3.xxx版本之後,在maven可以找到這個文件:/lib/maven-model-builder-
$
{version}.jar中;
打開該文件,能找到超級POM:\org\apache\maven\model\pom-4.0.0.xml ,它是所有Maven POM的父POM,所有Maven項目繼承該配置,你可以在這個POM中發現如下配置:
<span style="color:#000000"><code><repositories>
<repository>
<id>central</id>
<name>Central Repository</name>
<url>https://repo.maven.apache.org/maven2</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</code></span>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
關於遠程倉庫的配置,下面的我會詳細解釋,這裏我們只要知道,中央倉庫的id爲central,遠程url地址爲http://repo.maven.apache.org/maven2,它關閉了snapshot版本構件下載的支持。
1.3 遠程倉庫(私服)
在POM中配置遠程倉庫
前面我們看到超級POM配置了ID爲central的遠程倉庫,我們可以在POM中配置其它的遠程倉庫。這樣做的原因有很多,比如你有一個局域網的遠程倉庫,使用該倉庫能大大提高下載速度,繼而提高構建速度,也有可能你依賴的一個jar在central中找不到,它只存在於某個特定的公共倉庫,這樣你也不得不添加那個遠程倉庫的配置。
1.3.1 pom.xml中配置遠程倉庫
這裏配置一個遠程倉庫指向中央倉庫的中國鏡像,需要在你的maven項目pom.xml文件中增加:
<span style="color:#000000"><code><project>
...
<repositories>
<repository>
<id>maven-net-cn</id>
<name>Maven China Mirror</name>
<url>http://maven.net.cn/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>maven-net-cn</id>
<name>Maven China Mirror</name>
<url>http://maven.net.cn/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
...
</project>
</code></span>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
1. <repositories>講解:
我們先看一下<repositories>的配置,你可以在它下面添加多個<repository> ,每個<repository>都有它唯一的ID,一個描述性的name,以及最重要的,遠程倉庫的url。此外,<releases><enabled>true</enabled></releases>
告訴Maven可以從這個倉庫下載releases版本的構件,而<snapshots><enabled>false</enabled></snapshots>
告訴Maven不要從這個倉庫下載snapshot版本的構件。禁止從公共倉庫下載snapshot構件是推薦的做法,因爲這些構件不穩定,且不受你控制,你應該避免使用。當然,如果你想使用局域網內組織內部的倉庫,你可以激活snapshot的支持。
2. <pluginRepositories>講解:
至於,這是配置Maven從什麼地方下載插件構件(Maven的所有實際行爲都由其插件完成)。該元素的內部配置和完全一樣,不再解釋。
1.3.2 settings.xml中配置遠程倉庫
我們知道了如何在POM中配置遠程倉庫,但考慮這樣的情況:在一個公司內部,同時進行這3個項目,而且以後隨着這幾個項目的結束,越來越多的項目會開始;同時,公司內部建立一個Maven倉庫。我們統一爲所有這些項目配置該倉庫,於是不得不爲每個項目提供同樣的配置。問題出現了,這是重複 !
其實我們可以做到只配置一次,在哪裏配置呢?就是settings.xml。
不過事情沒有那麼簡單,不是簡單的將POM中的及元素複製到settings.xml中就可以,setting.xml不直接支持 這兩個元素。但我們還是有一個並不複雜的解決方案,就是利用profile,如下:
<span style="color:#000000"><code><settings>
...
<profiles>
<profile>
<id>dev</id>
<!-- repositories and pluginRepositories here-->
</profile>
</profiles>
<activeProfiles>
<activeProfile>dev</activeProfile>
</activeProfiles>
...
</settings>
</code></span>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
這裏我們定義一個id爲dev的profile,將所有repositories以及pluginRepositories元素放到這個profile中,然後,使用元素自動激活該profile。這樣,你就不用再爲每個POM重複配置倉庫。
使用profile爲settings.xml添加倉庫提供了一種用戶全局範圍的倉庫配置。
1.4 使用鏡像
需求:
- 如果你的地理位置附近有一個速度更快的central鏡像;
- 你想覆蓋central倉庫配置;
- 你想爲所有POM使用唯一的一個遠程倉庫(這個遠程倉庫代理的所有必要的其它倉庫)。
注: 如果配置了鏡像,maven將不再去找中央工廠統一去找鏡像地址下載
你可以使用settings.xml中的mirror配置。
以下的mirror配置用maven.net.cn覆蓋了Maven自帶的central:
<span style="color:#000000"><code>
<settings>
...
<mirrors>
<mirror>
<id>maven-net-cn</id>
<name>Maven China Mirror</name>
<url>http://maven.net.cn/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
...
</settings>
</code></span>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 在mirrorOf與repositoryId相同的時候優先是使用mirror的地址
- mirrorOf等於的時候覆蓋所有repository配置mirrorOf等於的時候覆蓋所有repository配置
- 存在多個mirror配置的時候mirrorOf等於放到最後存在多個mirror配置的時候mirrorOf等於放到最後
- 只配置mirrorOf爲central的時候可以不用配置repository只配置mirrorOf爲central的時候可以不用配置repository
<span style="color:#000000"><code><?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>X:\工具\maven資源\repository</localRepository>
<pluginGroups></pluginGroups>
<proxies></proxies>
<servers></servers>
<mirrors>
<mirror>
<id>nexus-aliyun</id>
<name>Nexus aliyun</name>
<mirrorOf>central</mirrorOf>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
<mirror>
<id>nexus-mine</id>
<name>Nexus mine</name>
<mirrorOf>*</mirrorOf>
<url>http://xx.xx.xx.xx/nexus/content/groups/public</url>
</mirror>
</mirrors>
<profiles></profiles>
</settings>
</code></span>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
nexus-aliyun使用阿里雲的鏡像作爲central中央倉庫
nexus-mine作爲私服,mirrorOf配置爲*來提供中央倉庫中不存在的jar包