多個倉庫源設定及repositories和mirrors的設定

2023-02-10 09:00:42
  在實際專案中會存在多個倉庫,包括我們自建的Nexus私有倉庫和阿里倉,這裡就需要設定多倉的順序,防止jar包不在其中一個倉庫時會自動從另外一個倉庫中拉取。
  Maven的Setting設定中有mirror和repository,它們的作用都是設定遠端maven倉庫的地址。repository就是直接設定站點地址,mirror則是作為站點的映象,代理某個或某幾個站點的請求,實現對repository的完全代替。
   
  有兩種形式可以設定多個repository, 設定多個profile或者在同一個profile中設定多個repository.設定多profile時,還需要設定activeProfiles使設定生效。
  下載依賴時,maven會按照設定從上到下的順序,依次嘗試從各個地址下載,成功下載為止。
  無論是設定國內的maven倉庫,還是設定nexus之類私服,都可以直接設定成repository, 這樣即使設定的這些倉庫有些問題導致一些包下不下來,也可以繼續用別的倉庫嘗試。
 
  <repository>時<id>似乎也沒什麼用,如果你只是在pom.xml中設定個倉庫,這個id是沒什麼用的,可以隨便寫。這個id是配合上面講的mirror一塊使用的,還記得mirrorOf嗎,我們設定mirrorOf為<mirrorOf>central</mirrorOf>是,mirror中的url會將預設的central倉庫的url給覆蓋了,所以這裡的<repository>標籤下的id是給mirrorOf用的。當repository中的id與mirrorOf一致時,mirrorOf中的url就會覆蓋repository中的url地址。
 
  在Mirrors部分可以設定多個映象倉庫,但是在該部分設定多個倉庫,並不能提供自動查詢多個倉庫的功能,預設還是取第一個倉庫進行查詢。
  我們這裡採用設定profiles的方式來達到想要的目的,直接上設定:
<?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>D:/m2/repository</localRepository>
  <pluginGroups>
    <pluginGroup>org.mortbay.jetty</pluginGroup>
  </pluginGroups>
  <proxies>
  </proxies>
  <servers>
    <server>
      <id>nexus-releases</id>
      <username>ali</username>
      <password>123456</password>
    </server>
  </servers>
  <mirrors>
  </mirrors>
  <profiles>
    <profile>
      <id>jdk-1.8</id>
      <activation>
        <activeByDefault>true</activeByDefault>
        <jdk>1.8</jdk>
      </activation>
      <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
      </properties>
    </profile>
    <profile>
      <id>downloadSources</id>
      <properties>
        <downloadSources>true</downloadSources>
        <downloadJavadocs>true</downloadJavadocs>
      </properties>
    </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> 
            <updatePolicy>always</updatePolicy>
          </snapshots>
        </repository>
      </repositories>
    </profile>
    <profile>
      <id>nexus-releases</id>
      <repositories>
        <repository>
          <id>nexus-releases</id>
          <url>http://10.3.87.5:8082/repository/maven-public/</url>
          <releases>
            <enabled>true</enabled>
          </releases>
          <snapshots>
            <enabled>true</enabled>
            <updatePolicy>always</updatePolicy>
          </snapshots>
        </repository>
      </repositories>
    </profile>
  </profiles>
  <activeProfiles>
   <activeProfile>aliyun</activeProfile>
   <activeProfile>nexus-releases</activeProfile>
   </activeProfiles>
</settings>

 注意:這裡面設定了maven.compiler.source,當環境中有jdk1.8以下版本時用maven打包時會報jdk低版本的提示,需要統一打包時jdk的版本,因此需要在此指定