什麼是POM?
POM 是項目對象模型(Project Object Model)的簡稱,它是Maven項目中的文件,使用XML表示,名稱叫做pom.xml。在Maven中,當談到Project的時候,不僅僅是一堆 包含代碼的文件。一個Project往往包含一個配置文件,包括了與開發者有關的,缺陷跟蹤系統,組織與許可,項目的URL,項目依賴,以及其他。它包含 了所有與這個項目相關的東西。事實上,在Maven世界中,project可以什麼都沒有,甚至沒有代碼,但是必須包含pom.xml文件。
概覽
下面是一個POM項目中的pom.xml文件中包含的元素。注意,其中的modelVersion是4.0.0,這是當前僅有的可以被Maven2&3同時支持的POM版本,它是必須的。
<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>
<!-- 基本設置 -->
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<packaging>...</packaging>
<dependencies>...</dependencies>
<parent>...</parent>
<dependencyManagement>...</dependencyManagement>
<modules>...</modules>
<properties>...</properties>
<!-- 構建過程的設置 -->
<build>...</build>
<reporting>...</reporting>
<!-- 項目信息設置 -->
<name>...</name>
<description>...</description>
<url>...</url>
<inceptionYear>...</inceptionYear>
<licenses>...</licenses>
<organization>...</organization>
<developers>...</developers>
<contributors>...</contributors>
<!-- 環境設置 -->
<issueManagement>...</issueManagement>
<ciManagement>...</ciManagement>
<mailingLists>...</mailingLists>
<scm>...</scm>
<prerequisites>...</prerequisites>
<repositories>...</repositories>
<pluginRepositories>...</pluginRepositories>
<distributionManagement>...</distributionManagement>
<profiles>...</profiles>
</project>
基本的設置:
POM包含了一個project所需要的所有信息,當然也就包含了構建過程中所需要的插件的配置信息,事實上,這裏申明瞭"who","what",和"where",然而構建生命週期(build lifecycle)s中說的是"when"和"how"。這並不是說POM並能影響生命週期的過程-事實上它可以。例如,配置一個可以嵌入ant任務到POM的mavem-antrun-plugin。它基本上就是一個聲明。就像build.xml告訴ant當運行時它該做什麼一樣,一個POM申明瞭它自己的配置。如果外力迫使生命週期跳過了ant插件的執行,這並不影響那些已經執行過的插件產生的效果。這一點和build.xml不一樣。
<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>
<groupId>org.codehaus.mojo</groupId>
<artifactId>my-project</artifactId>
<version>1.0</version>
</project>
Maven座標
上面的POM定義的是Maven2&3都承認的最小部分。groupId:artifactId:version是必須的字段(儘管在繼承中groupId和version不需要明確指出)。這三個字段就像地址和郵戳,它標記了倉庫中的特定位置,就像Maven projects的座標系統一樣。