pom.xml詳解
阿新 • • 發佈:2020-11-04
POM(Project Object Model)是Maven工程的工作基礎,以pom.xml的形式存在專案中。在我們的工程中有幾個元素是必須的:
- project root
- modelVersion - 應被設定為4.0.0
- groupId - 專案組id
- artifactId - 專案id
- version - 專案版本
假設你有一個專案com.mycompany.app:my-app:1.0專案結構如下:
<project> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany.app</groupId> <artifactId>my-module</artifactId> <version>1.0</version> </project>
如果我們想要my-module繼承上級工程的pom配置,則可將pom.xml改為如下:
<project> <parent> <groupId>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <version>1.0</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany.app</groupId> <artifactId>my-module</artifactId> <version>1.0</version> </project>
此外,如果我們希望工程的groupId跟version保持與父工程一致,則可去掉 groupId和version:
<project> <parent> <groupId>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <version>1.0</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>my-module</artifactId> </project>
下面就以一個比較完整pom.xml檔案為例說明一下:
<project>
<parent>
<!--被繼承的父專案的全球唯一識別符號-->
<groupId>com.mycompany.app</groupId>
<!--被繼承的父專案的構件識別符號-->
<artifactId>my-app</artifactId>
<!--專案當前版本,格式為:主版本.次版本.增量版本-限定版本號-->
<version>1.0</version>
</parent>
<!--宣告專案描述符遵循哪一個POM模型版本。模型本身的版本很少改變,雖然如此,但它仍然是必不可少的,這是為了當Maven引入了新的特性或者其他模型變更的時候,確保穩定性。-->
<modelVersion>4.0.0</modelVersion>
<!--專案的全球唯一識別符號,通常使用全限定的包名區分該專案和其他專案。並且構建時生成的路徑也是由此生成, 如com.mycompany.app生成的相對路徑為:/com/mycompany/app-->
<groupId>com.mycompany.app</groupId>
<!--構件的識別符號,它和group ID一起唯一標識一個構件。換句話說,你不能有兩個不同的專案擁有同樣的artifact ID和groupID;在某個特定的group ID下,artifact ID也必須是唯一的。構件是專案產生的或使用的一個東西,Maven為專案產生的構件包括:JARs,原始碼,二進位制釋出和WARs等。-->
<artifactId>my-module</artifactId>
<!--專案當前版本,格式為:主版本.次版本.增量版本-限定版本號-->
<version>1.0</version>
<!--專案產生的構件型別,例如jar、war、ear、pom。外掛可以建立他們自己的構件型別,所以前面列的不是全部構件型別-->
<packaging>jar</packaging>
<!--專案當前版本,格式為:主版本.次版本.增量版本-限定版本號-->
<!--(1表示大版本號,0表示小版本號)SNAPSHOT:快照,表示該版本正在開發中/release:穩定版本/beta:公測版/alpha:內部測試版/GA:正式釋出版-->
<version>1.0-SNAPSHOT</version>
<!--專案的名稱, Maven產生的文件用-->
<name>專案名稱</name>
<!--專案主頁的URL, Maven產生的文件用-->
<url>專案主頁URL</url>
<!--專案的詳細描述,Maven產生的文件用。當這個元素能夠用HTML格式描述時(例如,CDATA中的文字會被解析器忽略,就可以包含HTML標籤), 不鼓勵使用純文字描述。如果你需要修改產生的web站點的索引頁面,你應該修改你自己的索引頁檔案,而不是調整這裡的文件。-->
<description>Maven工程的描述資訊</description>
<!--開發人員的列表資訊-->
<developers>
<developer>
<name>開發者1</name>
<!--等其他填寫的資訊-->
</developer>
<developer>
<name>開發者2</name>
<!--等其他填寫的資訊-->
</developer>
</developers>
<!--許可證資訊-->
<licenses></licenses>
<!--組織資訊-->
<organization></organization>
<!--依賴項資訊,依賴到的jar包-->
<dependencies>
<!--第一個依賴jar-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<type></type>
<!--依賴的範圍,表示本依賴應用於專案中的哪些階段如下:
compile:預設值。表示該依賴在編譯、測試、執行階段都有效
provided:在編譯和測試時有效,在執行時不會被加入
runtime:在測試和執行時有效
test:在測試範圍內有效
system:在編譯和測試時有效,與provided類似,不過要與本地系統相關聯,可移植性差
import:在dependenceManagement中使用,表示匯入別的專案的依賴到本專案中-->
<scope>test</scope>
<!--設定依賴是否可選,取值為true或false,預設是false,如果是false,則子專案必然繼承父專案的依賴(不可選),若為true,則子專案可以自己選擇是否需要父專案的依賴,若需要就手動引入,若不需要就不引入-->
<optional>true</optional>
<!--排除依賴列表,如果a依賴b,b依賴c,那麼預設的a依賴c,但是我a就是不想依賴c,則可以在這裡排除掉c-->
<exclusions>
<exclusion></exclusion>
</exclusions>
</dependency>
<!--第二個依賴jar-->
<dependency>
<!--....-->
</dependency>
</dependencies>
<!--一般為了統一管理多個專案,讓他們的依賴都具有相同的版本,在所有子模組中的依賴標籤都不指定明確的版本號,maven會自動向其父級查詢,直到找到一個父模組擁有dependencyManagement標籤,指定了所有依賴的版本號。這就保證所有模組的依賴版本都來自於同一個父模組的dependencyManagement指定。-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</dependency>
</dependencies>
</dependencyManagement>
<!--外掛對構建專案的支援-->
<build>
<!--外掛-->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.6</version>
<!--表示該外掛在什麼時候執行-->
<executions>
<execution>
<!--表示在打包階段之後執行本外掛-->
<phase>package</phase>
<!--執行方式,一般是與java的啟動引數類似,例如:run等-->
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<!--多模組共同管理,一起編譯-->
<modules>
<module>A</module>
<module>B</module>
<module>C</module>
</modules>
<!--屬性,可以指定變數,如下所示-->
<properties>
<!--變數名稱自己定義,獲取變數值使用:${變數名稱} -->
<junit.version>4.10</junit.version>
</properties>
</project>