因為之前maven配置的一直都是公司的私服倉庫,今天 拉 JMH包發現拉不到,於是考慮配置多個倉庫,可以滿足工作以及日常開發需求,順便梳理
mirrors
和repository
的區別
maven 設置多個倉庫
有兩種不同的方式可以指定多個存儲庫的使用。第一種方法是在 POM 中指定要使用的存儲庫。這在構建概要文件內部和外部都支持
<project>
...
<repositories>
<repository>
<id>my-repo1</id>
<name>your custom repo</name>
<url>http://jarsm2.dyndns.dk</url>
</repository>
<repository>
<id>my-repo2</id>
<name>your custom repo</name>
<url>http://jarsm2.dyndns.dk</url>
</repository>
</repositories>
...
</project>
另一種指定多個存儲庫的方法是在${user.home}/.m2/settings.xml
或者 ${maven.home}/conf/settings.xml
文件中 新建 profile
信息 如下:
<settings>
...
<profiles>
// 第一個倉庫地址
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>my-repo2</id>
<name>your custom repo</name>
<url>http://jarsm2.dyndns.dk</url>
</repository>
</repositories>
</profile>
// 第二個倉庫地址
<profile>
<id>aliyun</id>
<repositories>
<repository>
<id>aliyun</id>
<url>https://maven.aliyun.com/repository/public</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>aliyun</id>
<url>https://maven.aliyun.com/repository/public</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>nexus</activeProfile>
<activeProfile>aliyun</activeProfile>
</activeProfiles>
...
</settings>
如果您在profiles
中指定 repository
存儲庫,需要激活該特定profiles
,我們通過在 activeProfiles
中進行配置
你也可以通過執行以下命令來激活這個配置文件:
mvn -Pnexus ...
正常maven 的settings.xml配置完成profiles之后,可以在idea中進行切換
設置鏡像
鏡像 相當於攔截機。它攔截 maven 對遠程存儲庫的請求,將請求中的遠程存儲庫地址重定向到鏡像中配置的地址。它主要提供了一個方便的方式來切換遠程倉庫地址。例如,在公司工作時,使用電信網絡,連接到電信倉庫。當我回家的時候,是聯通的網絡。我想連接聯通的倉庫。我可以通過鏡像配置將我的項目的倉庫地址變成聯通,而不是在特定的項目配置文件中逐個地改變地址
<settings>
...
<mirrors>
<mirror>
<id>aliyun</id>
<name>Maven Repository Manager running on repo.mycompany.com</name>
<url>http://repo.mycompany.com/proxy</url>
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>
...
</settings>
配置說明:
•id
: 鏡像的唯一標識•mirrorOf
: 指定鏡像規則,什么情況下從鏡像倉庫拉取,•*
: 匹配所有,所有內容都從鏡像拉取•external:*
: 除了本地緩存的所有從鏡像倉庫拉取idea•repo,repo1
: repo 或者 repo1 ,這里的 repo 指的倉庫 ID•*,!repo1
: 除了 repo1 的所有倉庫•name
: 名稱描述•url
: 地址
示列: 針對aliyun 倉庫進行設置鏡像重定向到鏡像中配置的地址
<mirrors>
<mirror>
<id>aliyun</id>
<mirrorOf>aliyun</mirrorOf>
<name>ppd mirror</name>
<url>http://repo.mycompany.com/proxy</url>
</mirror>
</mirrors>
image-20210805154919762
這個時候會發現 雖然 repository 配置的是正確aliyun 地址,但是由於mirror鏡像攔截的原因重定向新的url.
image-20210805155037900
mirrors 與profiles 設置repository的區別
mirror 與 repository 不同的是,假如配置同一個 repository 多個 mirror 時,相互之間是備份關系,只有當倉庫連不上時才會切換到另
一個,而如果能連上但是找不到依賴時是不會嘗試下一個 mirror 地址的
reference
•https://maven.apache.org/guides/mini/guide-mirror-settings.html