天天看點

Maven pom.xml配置檔案解析

簡介:

使用IDEA新建立Maven Java項目後,項目根目錄下有一個pom.xml檔案,pom檔案包含了項目的基本資訊,用來設定項目的項目依賴、插件、項目版本等資訊。

執行任務或目标時,Maven 會在目前目錄中查找并讀取 POM,擷取所需的配置資訊,然後執行目标。

POM檔案中可以指定以下配置資訊:

  • 項目依賴
  • 插件
  • 執行目标
  • 項目建構 profile
  • 項目版本
  • 項目開發者清單
  • 相關郵件清單資訊

pom檔案中的預設配置

每個pom檔案必需的元素有根元素:project 元素和三個必需字段:工程組的辨別groupId,工程的名稱artifactId,版本資訊version,如下:

<project xmlns="http://maven.apache.org/POM/4.0.0"
	 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	 <modelVersion>4.0.0</modelVersion><!--maven2.0必須是這樣寫,現在是maven2唯一支援的版本-->	
	 <groupId>org.example</groupId  -->項目唯一辨別
	 <artifactId>datasec-glory-jdbc-driver</artifactId  -->項目名稱
	 <version>1.0-SNAPSHOT</version-->項目版本	
	</project>
           

pom檔案中的依賴dependencies

Dependencies字段用來聲明項目依賴的其他項目群組件,有三要素唯一辨別其他項目群組件。需要是maven中心包管理的項目或元件,否則需要自己部署,或者通過設定scope為system并指定路徑,将依賴項目包含進來。

有時候各個項目多層依賴,如A依賴B,B依賴C,如果在A中依賴B,預設A依賴C,如果A不想依賴C,可以用exclusions将C排除。

<!--該元素描述了項目相關的所有依賴。 這些依賴自動從項目定義的倉庫中下載下傳 -->
<dependencies>
	<dependency>
    <!------------------- 依賴坐标 ----------------->
    <!--依賴項目的坐标三元素:groupId + artifactId + version -->
    <groupId>com.jdcloud.security</groupId>
    <artifactId>datasec-glory-jdbc-driver</artifactId>
    <version>2.0.0-SNAPSHOT</version>
    </dependency>

    <dependency>
    <groupId>com.jdcloud.security</groupId>
    <artifactId>datasec-glory-jdbc-test</artifactId>
    <version>2.0.0-SNAPSHOT</version>
    </dependency>
</dependencies>
           

遠端倉庫清單

遠端倉庫清單的配置,包括依賴和擴充的遠端倉庫配置,以及插件的遠端倉庫配置。在本地倉庫找不到的情況下,maven下載下傳依賴、擴充和插件就是從這裡配置的遠端倉庫中進行下載下傳。

需要注意的是release和snapshot兩者的差別。release是穩定版本,一經釋出不再修改,想釋出修改後的項目,隻能更新項目版本再進行釋出;snapshot是不穩定的,一個snapshot的版本可以不斷改變。項目在開發期間一般會使用snapshot,更友善進行頻繁的代碼更新;一旦釋出到外部,或者開發基本完成,代碼疊代不再頻繁,則推薦使用release。

<!--發現依賴和擴充的遠端倉庫清單。 -->
<repositories>
   	<repository>
	<!--包含需要連接配接到遠端倉庫的資訊 -->
           <snapshots> <!-- 有了releases和snapshots這兩組配置,就可以在每個單獨的倉庫中,為每種類型的構件采取不同的政策 -->
             <enabled>false</enabled>  <!--值為true或者false,表示該倉庫是否為下載下傳某種類型構件(釋出版,快照版)開啟。 -->
           </snapshots>
           <id>central</id> <!--遠端倉庫唯一辨別符。可以用來比對在settings.xml檔案裡配置的遠端倉庫 -->
           <name>libs-releases</nam <!--遠端倉庫名稱 -->
           <url>http://artifactory.jd.com/libs-releases</url>  <!--遠端倉庫URL,按protocol://hostname/path形式 -->
       </repository>
       <repository>
           <snapshots/>
           <id>snapshots</id>
           <name>libs-snapshots</name>
           <url>http://artifactory.jd.com/libs-snapshots</url>
       </repository>
   </repositories>