天天看點

maven倉庫設定,profile配置,鏡像設定1. 超級pom檔案2. Maven-全局範圍setting.xml和使用者範圍setting.xml差別3. maven中profile元素的作用意義和用法4. maven下載下傳資源時,倉庫的優先級5. 鏡像的配置及原理

目錄

1. 超級pom檔案

2. Maven-全局範圍setting.xml和使用者範圍setting.xml差別

3. maven中profile元素的作用意義和用法

4. maven下載下傳資源時,倉庫的優先級

5. 鏡像的配置及原理

我們知道隻有當資源下載下傳到本地倉庫時,才會被maven使用。由于原始的本地倉庫是空的, Maven必須至少知道一個遠端倉庫才能在執行指令時下載下傳需要的構件。本地倉庫預設位址為~/.m2/;遠端倉庫又可以簡單的分為兩類:中央倉庫和私服。

我們的maven工程其實都由預設的中央倉庫,這需要從超級pom.xml檔案說起。

1. 超級pom檔案

超級pom檔案存在于maven核心程式中,路徑:apache-maven-3.3.9\lib\maven-model-builder-3.3.9.jar\org\apache\maven\model\pom-4.0.0.xml。任何一個Maven項目都隐式地繼承自超級POM, 是以超級POM的大量配置都會被所有的Maven項目繼承, 這些配置也成為了Maven所提倡的約定。

如下所示,超級pom.xml檔案中定義了預設的中央倉庫,其ID為central,位址為 https://repo.maven.apache.org/maven2, 它關閉了snapshot版本構件下載下傳的支援。禁止從公共倉庫下載下傳snapshot構件是推薦的做法,因為這些構件不穩定,且不受你控制,你應該避免使用。

<!-- START SNIPPET: superpom -->
<project>
  <modelVersion>4.0.0</modelVersion>

  <!-- 定義了中央倉庫以及插件倉庫, 均為:https://repo.maven.apache.org/maven2 -->
  <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>

  <pluginRepositories>
    <pluginRepository>
      <id>central</id>
      <name>Central Repository</name>
      <url>https://repo.maven.apache.org/maven2</url>
      <layout>default</layout>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <releases>
        <updatePolicy>never</updatePolicy>
      </releases>
    </pluginRepository>
  </pluginRepositories>

  .....
  .....

</project>
<!-- END SNIPPET: superpom -->
           

2. Maven-全局範圍setting.xml和使用者範圍setting.xml差別

原文連結:https://blog.csdn.net/tjsahwj/article/details/84250896

補充:一個系統中存在多個使用者的場景下,每個使用者都有屬于自己的home目錄。在各自的home目錄下管理自己的setting.xml配置,則是使用者範圍的配置。一個系統中會安裝一個maven核心程式,在maven核心程式中也存在一個setting.xml配置,該配置則是針對整個系統所有使用者的全局配置。

3. maven中profile元素的作用意義和用法

原文連結:https://blog.csdn.net/zy103118/article/details/79879879

提煉:

  • profile可以在setting.xml和pom.xml中配置。由于profile可以設定激活條件,是以可以利用這個特性來達到不同條件下使用不同的profile的目的。
  • profile中定義的 properties鍵值對可以在pom.xml中使用,若有兩個profile同時定義了一個屬性hello,且這兩個profile都被激活。那麼後定義的profile會覆寫前面定義的profile屬性,即在pom中使用的hello屬性的值是後定義profile中的。
  • 使用預設激活方式時<activeByDefault>true</activeByDefault>,隻有在沒有有指定其他profile激活時才會生效。

補充:

  • 激活的時候,若存在多個激活條件,多個條件是或的關系,即有一個條件滿足就可以激活該profile。如下所示:
<activation>
	<jdk>1.8</jdk>
	<os>
		<name>1111</name>
	</os>
</activation>
           

4. maven下載下傳資源時,倉庫的優先級

  • 基本優先級順序:本地倉庫 > settings.xml的profile的倉庫 > pom.xml的profile的倉庫 >pom.xml的倉庫 > 中央倉庫
  • 如果倉庫的id設定成“central”,則該倉庫會覆寫maven預設的中央倉庫配置(這種情況會影響基本優先級,例如在setting.xml中配置了一個倉庫,且id為“central”,此時這個倉庫覆寫了中央倉庫,但是優先級變為小于pom.xml的profile的倉庫, 大于pom.xml的倉庫)。 
  • 如果發現該倉庫有鏡像設定,則用鏡像的位址代替,例如現在進行到要在respository A倉庫中查找某個依賴,但A倉庫配置了mirror,則會轉到從A的mirror中查找該依賴,不會再從A中查找。
  • 如果最終下載下傳不到需要的資源,maven則會報錯。

5. 鏡像的配置及原理

原文位址:https://blog.csdn.net/b452608/article/details/49871237?utm_source=blogxgwz5

提煉:

  • maven的mirror是鏡像,而不是“分庫”,隻有目前一個mirror無法連接配接的時候,才會去找後一個,類似于備份和容災。是以當第一個mirror中不存在a.jar的時候,并不會去第二個mirror中查找,甚至于,maven根本不會去其他的mirror位址查詢。
  • 當有id為B,A,C的順序的mirror在mirrors節點中,maven會根據字母排序來指定第一個,是以不管怎麼排列,一定會找到A這個mirror來進行查找,當A無法連接配接,出現意外的情況下,才會去B查詢。

繼續閱讀