1. 程式人生 > 其它 >Maven 多倉庫和映象配置

Maven 多倉庫和映象配置

因為之前maven配置的一直都是公司的私服倉庫,今天 拉 JMH包發現拉不到,於是考慮配置多個倉庫,可以滿足工作以及日常開發需求,順便梳理mirrorsrepository的區別

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