倉庫的分類:本地倉庫和遠程倉庫;倉庫中保存的內容有:maven自身所需要的插件、第三方(第一方:jdk;第二方:開發者;第三方:其他人)框架或工具的jar包,我們自己開發的maven工程;
本地倉庫
默認是在~/.m2/repository/,~代表的是用戶目錄;
配置比較簡單,只要在xml中配置如下:
<!-- 本地倉庫的位置 --> <localRepository>E:/Data/Maven/repository</localRepository>
遠程倉庫
分為中央倉庫、中央倉庫鏡像和私服。默認是maven的中央倉庫:https://mvnrepository.com/
遠程倉庫配置:
<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>
id:該遠程倉庫的唯一標識;
name:遠程倉庫的名稱;
使該倉庫生效:
<activeProfile>central</activeProfile>
配置鏡像:
把對遠程倉庫的請求轉換到對應的鏡像地址的請求。每個遠程倉庫都會有一個id,這樣我們就可以創建自己的mirror來關聯到該倉庫,那么以后需要從遠程倉庫下載工件的時候Maven就可以從我們定義好的mirror站點來下載,這可以很好的緩解我們遠程倉庫的壓力。在我們定義的mirror中每個遠程倉庫都只能有一個mirror與它關聯,也就是說你不能同時配置多個mirror的mirrorOf指向同一個repositoryId;
1 <mirrors> 2 <mirror> 3 <id>internal-repository</id> 4 <name>Maven Repository Manager running on repo.mycompany.com</name> 5 <url>http://repo.mycompany.com/proxy</url> 6 <mirrorOf>*</mirrorOf> 7 </mirror> 8 </mirrors>
id
: 鏡像的唯一標識
mirrorOf
: 指定鏡像規則,什么情況下從鏡像倉庫拉取,官方文檔
*
: 匹配所有,所有內容都從鏡像拉取external:*
: 除了本地緩存的所有從鏡像倉庫拉取repo,repo1
: repo 或者 repo1 ,這里的 repo 指的倉庫 ID*,!repo1
: 除了 repo1 的所有倉庫
name
: 名稱描述
url
: 地址
阿里雲鏡像配置:
1 <mirror> 2 <id>alimaven</id> 3 <name>aliyun maven</name> 4 <url>http://maven.aliyun.com/nexus/content/groups/public/</url> 5 <mirrorOf>central</mirrorOf> 6 </mirror>
其他標簽說明:
server
如果倉庫地址是個私服;需要配置 server
配置分發構建到私服的驗證,在setting.xml文件的<servers></servers>標簽內插入如下代碼段
<server> <id>server001</id> <!--鑒權用戶名。鑒權用戶名和鑒權密碼表示服務器認證所需要的登錄名和密碼。--> <username>my_login</username> <!--鑒權密碼。鑒權用戶名和鑒權密碼表示服務器認證所需要的登錄名和密碼。密碼加密功能已被添加到2.1.0+。詳情請訪問密碼加密頁面--> <password>my_password</password> </server>
pluginGroups:
- 元素里包含了一個
pluginGroup
列表。默認maven中有org.apache.maven.plugins
和org.codehaus.mojo
兩個pluginGroup
。表示當通過plugin的前綴來解析plugin的時候到哪里尋找。pluginGroup元素指定的是plugin的groupId - 如果pom,xml中的plugin沒有設置指定groupId,熟悉maven的都知道我們引入以來至少需要groupId和artifactId的。但是下面的插件中沒有。這個時候maven就會獲取
pluginGroups
里pluginGroup
列表和配置中artifactId進行一一匹配。匹配到下載。 - jetty 插件的配置 :為了更明確的指向這個groupId是我們需要的插件,唯一的辦法就是在settings.xml也做如下設置:
<pluginGroups> <pluginGroup>org.mortbay.jetty</pluginGroup> </pluginGroups>
完整的setting配置:
<?xml version="1.0" encoding="UTF-8"?> <settings> <localRepository>E:/Data/Maven/repository</localRepository> <pluginGroups> <pluginGroup>org.mortbay.jetty</pluginGroup> </pluginGroups> <mirrors> <mirror> <id>nexus</id> <mirrorOf>*</mirrorOf> <url>http://nexus.d.xxx.net/nexus/content/groups/public</url> <!--鏡像地址--> </mirror> </mirrors> <profiles> <profile> <id>development</id> <repositories> <!-- 構件的倉庫--> <repository> <id>central</id> <url>http://nexus</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </repository> </repositories> <pluginRepositories> <!--插件的倉庫--> <pluginRepository> <id>central</id> <url>http://nexus</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </pluginRepository> </pluginRepositories> </profile> </profiles> <activeProfiles> <activeProfile>development</activeProfile> <!-- 對於所有的pom,上邊定義的id=development的profile都是活躍狀態的--> </activeProfiles> <servers> <server> <id>archiva.internal</id> <!--release版本的用戶名和密碼--> <username>yangwenqiang</username> <password>pwdpwd</password> </server> <server> <id>archiva.snapshots</id> <!-- snapshot版本的用戶名和密碼--> <username>yangwenqiang</username> <password>pwdpwd</password> </server> </servers> </settings>