maven遠端倉庫配置及含義解釋

略乏旅人發表於2024-08-28

0 下載依賴的過程

1 預設情況下maven會去中央倉庫central找依賴或外掛

  • 無需額外配置

2 配置多個repository倉庫時會先查詢central倉庫再依此查詢多個repository倉庫

  • 需要配置
<profile>
  <id>myprofile1</id>
  <!--依賴倉庫配置-->
  <repositories>
    <!--配置一個依賴倉庫-->
    <repository>
      <!--可以被mirrorOf攔截的id-->
      <id>myrepo1</id>
      <!--備註資訊-->
      <name>xxx</name>
      <url>https://xxx.xxx.xxx.xxx/xxx/xxxx</url>
      <!--允許從此倉庫中下載realease版本依賴-->
      <releases>
        <enabled>true</enabled>
      </releases>
      <!--允許從此倉庫中下載snapshot版本依賴-->
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
    </repository>
    <!--配置一個依賴倉庫-->
    <repository>
      <id>myrepo2</id>
      <name>xxx</name>
      <url>http://xxx.xxx.xxx/xxx/xxx</url>
      <releases>
        <enabled>true</enabled>
      </releases>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
    </repository>
  </repositories>
  <!--外掛倉庫配置-->
  <pluginRepositories>
    <!--配置一個外掛倉庫-->
    <pluginRepository>
    <!--可以被mirrorOf攔截的id-->
    <id>myrepo1</id>
    <name>xxx</name>
    <url>https://xxx.xxx.xxx.xxx/xxx/xxxx</url>
    <releases>
     <enabled>true</enabled>
    </releases>
    <snapshots>
      <enabled>true</enabled>
    </snapshots>
    </pluginRepository>
    <!--配置一個外掛倉庫-->
    <pluginRepository>
      <id>myrepo2</id>
      <name>xxx</name>
      <url>http://xxx.xxx.xxx/xxx/xxx</url>
      <releases>
        <enabled>true</enabled>
      </releases>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
      </pluginRepository>
  </pluginRepositories>
</profile>
<!--使配置生效的兩種方式-->
<!--方式一(要放在profile標籤裡面的id標籤同級的位置)-->
<activation>  
  <activeByDefault>true</activeByDefault>  
</activation>

<!--方式二-->
<activeProfiles>
  <!--允許配置多個activeProfile-->
  <activeProfile>myprofile1</activeProfile>
</activeProfiles>

3 配置mirror倉庫時會攔截指定的查詢請求轉向自身

  • 需要配置
<mirror>  
  <id>myrepo01</id>
  <!--備註資訊-->
  <name>xxx</name>
  <!--攔截對中央倉庫的請求--> 
  <mirrorOf>central</mirrorOf>
  <url>https://xxx.xxx/xxx/xx/xx/xx/xx</url>
</mirror>
<mirror>  
  <id>myrepo02</id>
  <!--備註資訊-->
  <name>xxx</name>
  <!--攔截對myrepo1倉庫的請求-->
  <mirrorOf>myrepo1</mirrorOf>
  <url>http://xxx.xx/xxx/x/x/x/x</url>
</mirror>
  • 注意 mirrorOf支援萬用字元
<!--出現如下配置時 當去central下載依賴或外掛時會被<mirrorOf>central</mirrorOf>所在的mirror倉庫攔截(類似java過載 匹配更精確的)-->
<mirrorOf>*</mirrorOf>
<mirrorOf>central</mirrorOf>

4 建議配置方案
配置一箇中央倉庫的mirror倉庫
配置一個repository倉庫作為私服
5 上傳jar包到repository倉庫

  • 1~4的配置僅對下載jar包有效,對上傳jar包無效
  • 上傳的配置需要配置在專案的pom.xml中(在父pom中配置即可)
  • 標籤配置在project標籤下
<distributionManagement>
  <!--指定release版本的jar包上傳地址-->
  <repository>  
    <id>mydeployrepo1</id>  
    <name>xxx</name>                                                  
    <url>http://xxxxx.xxx.x/xxx</url>  
  </repository>
  <!--指定snapshot版本的jar包上傳地址-->  
  <snapshotRepository>  
    <id>mydeployrepo2</id>  
    <name>xxx</name>  
    <url>http://x.xx.xxx.xxxxx/xxx</url>  
  </snapshotRepository>  
</distributionManagement>  

6 上傳jar包一般需要賬號密碼

  • 密碼配置(配置在settings.xml中)
<servers>
  <server>
    <!--上傳jar包需要賬號密碼時會根據id獲取,因此要保證上傳地址的id與密碼的id一致-->
    <id>mydeployrepo1</id>
    <username>myaccountxx</username>
    <password>xxx</password>
  </server>
  <server>
   <id>mydeployrepo2</id>
   <username>myxxaccount</username>
   <password>xxxxx</password>
  </server>
</servers>

7 其他注意事項

  • 以上的這些配置中id標籤必須配置
  • 以上的這些配置中name標籤可以不配置(類似備註資訊,沒有太大作用)

8 待整理雜項
maven中央倉庫
https://repo.maven.apache.org/maven2/ (預設使用)
https://repo1.maven.org/maven2/

阿里雲倉庫
https://maven.aliyun.com/repository/public
https://maven.aliyun.com/nexus/content/groups/public/

華為雲倉庫
https://repo.huaweicloud.com/repository/maven/
https://mirrors.huaweicloud.com/repository/maven/

騰訊雲倉庫
http://mirrors.cloud.tencent.com/nexus/repository/maven-public/

清華大學倉庫
https://repo.maven.apache.org/maven2/

scope標籤的值
complie---------fastjson.jar
complie階段可參與、test階段可參與、package階段可參與、執行時參與

runtime---------mysql-connection-java.jar
complie階段不可參與、test階段可參與、package階段可參與、執行時參與

provided----------servlet-api.jar
complie階段可參與、test階段可參與、package階段不可參與、執行時參與

test-------------junit.jar
complie階段不可參與、test階段可參與、package階段不可參與、執行時不參與

生命週期待研究
https://www.cnblogs.com/amigou/p/15751314.html
https://www.runoob.com/maven/maven-build-life-cycle.html

打包相關外掛待研究
https://blog.csdn.net/Ares5kong/article/details/128777500

相關文章