setting.xml/pom.xml

settings.xml

settings.xml是maven的全局配置文件
settings.xml文件一般存在于兩個位置:
1.全局配置: {M2_HOME}/conf/settings.xml 2.用戶配置:{user.home}/.m2/settings.xml
用戶配置優先級高于全局配置

頂級標簽

<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
                          https://maven.apache.org/xsd/settings-1.0.0.xsd">
  <localRepository/> 
  <!--構建系統本地倉庫的路徑,默認值是~/.m2/repository -->
  <interactiveMode/>
  <!--表示maven是否需要和用戶交互以獲得輸入(默認為true),如果需要則設置為true == <interactiveMode>true</interactiveMode> -->
  <usePluginRegistry/>
  <!--表示maven是否需要使用plugin-registry.xml文件來管理插件版本(默認為false),如果需要讓maven使用文件~/.m2/plugin-registry.xml來管理插件版本,則設為true -->
  <offline/>
  <!--表示maven是否需要在離線模式下運行,默認為false-->
  <pluginGroups/>
  <!--當插件的組織id(groupId)沒有顯式提供時,供搜尋插件組織Id(groupId)的列表-->
  <servers/>
  <!--一般,倉庫的下載和部署是在pom.xml文件中的repositories和distributionManagement元素中定義的。然而,一般類似用戶名、密碼(有些倉庫訪問是需要安全認證的)等信息不應該在pom.xml文件中配置,這些信息可以配置在settings.xml中-->
  <mirrors/>
  <!--為倉庫列表配置的下載鏡像列表-->
  <proxies/>
  <!--用來配置不同的代理-->
  <profiles/>
  <!--根據環境參數來調整構建配置的列表,它包含了id、activation、repositories、pluginRepositories和 properties元素,如果一個settings.xml中的profile被激活,它的值會覆蓋任何其它定義在pom.xml中帶有相同id的profile-->
  <activeProfiles/>
  <!--該元素包含了一組activeProfile元素,每個activeProfile都含有一個profile id。任何在activeProfile中定義的profile id,不論環境設置如何,其對應的 profile都會被激活。如果沒有匹配的profile,則什么都不會發生-->
</settings>

二級標簽

profile標簽

pom

pom作為項目對象模型。通過xml表示maven項目,使用pom.xml來實現。主要描述了項目:包括配置文件;開發者需要遵循的規則,缺陷管理系統,組織和licenses,項目的url,項目的依賴性,以及其他所有的項目相關因素。

pom.xml

一級標簽

</groupId>
<!--項目或者組織的唯一標志-->
</artifactId>
<!--項目的通用名稱-->
</version>
<!--項目的版本-->
</packaging>
<!--打包機制,例如pom jar等-->
<!--groupId,artifactId,version,packaging作為項目唯一坐標-->
</classifier>
<!--分類-->
</url>
<!--開發團隊官方地址,非必要-->
</dependencies >
<!--所有生命在dependencies里的依賴都會自動引入,并默認被所有的子項目繼承-->
</dependencyManagement>
<!--在我們項目頂層的POM文件中,我們會看到dependencyManagement元素。通過它元素來管理jar包的版本,從而控制所有子項目的依賴項的版本統一,所以讓子項目中引用一個依賴可以不用顯示的列出版本號,maven會根據父子關系向上尋找一個dependencyManagement中存在這個依賴項并獲取版本信息-->

dependencies與dependencyManagement 的區別:
dependencyManagement僅僅是聲明依賴并不會真正地注入,因此子項目需要顯示的聲明需要用的依賴。如果不在子項目中聲明依賴,是不會從父項目中繼承下來的;只有在子項目中寫了該依賴項,并且沒有指定具體版本,才會從父項目中繼承該項,并且version和scope都讀取自父pom,但是如果子項目中已經指定了version則不會向上尋找而直接使用該版本的jar。

二級標簽

dependency

<dependency>  
       <groupId>junit</groupId>  
       <artifactId>junit</artifactId>  
       <version>4.11</version>  
       <scope>test</scope>  
       <type >jar</ type >  
       <optional >true</ optional >  
       </exclusions>
</dependency>

groupId,artifactId,version,packaging定義了一個具體的依賴項
optional:設置指依賴是否可選,默認為false,即子項目默認都繼承,為true,則子項目必需顯示的引入,與dependencyManagement里定義的依賴類似
exclusions:如果X需要A,A包含B依賴,那么X可以聲明不要B依賴,只要在exclusions中聲明exclusion
scope:用來指定當前包的依賴范圍

  • compile(編譯范圍),是默認的范圍,編譯范圍依賴在所有的classpath中可用,同時它們也會被打包。
  • provided(已提供范圍),只有在當JDK或者一個容器已提供該依賴之后才使用。
  • runtime(運行時范圍),在運行和測試系統的時候需要。
  • test(測試范圍),在一般的 編譯和運行時都不需要。
  • system(系統范圍),與provided類似
    在dependencyManagement中的dependency可以使用scope=import來解決pom單繼承問題,即可以將雜亂冗長的parent 分成多個model

pom關系

  • 依賴關系:就是一個dependency
  • 繼承關系:子pom與父pom的關系,父pom用來進行統一的版本關系,注意此時packaging必須為pom
  • 聚合關系:
    總pom
<modules>  
    <!-- 這里配置的不是artifactId,而是這個模塊的目錄名稱-->  
    <module>module-1</module>  
    <module>module-2</module>  
    <module>module-3</module>  
</modules>

子pom

<!-- 聲明總項目的坐標 -->  
<parent>
    <groupId>org.clf.parent</groupId>   
    <artifactId>my-parent</artifactId>   
    <version>2.0</version>   
</parent> 

繼承與聚合都屬于父子關系, 不同的是對于聚合模塊來說,它知道有哪些被聚合的模塊,但那些被聚合的模塊不知道這個聚合模塊的存在。對于繼承關系的父 POM來說,它不知道有哪些子模塊繼承與它,但那些子模塊都必須知道自己的父 POM是什么,在實際項目中,一個 POM往往既是聚合POM,又是父 POM,它繼承了某個項目,本身包含幾個子模塊,同時肯定會存在普通的依賴關系,就是說,依賴、繼承、聚合這三種關系是并存的

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。