pom

計算機術語

Maven是以項目為中心的設計。POM(project object model)是Maven對一個單一項目的描述。沒有POM的話,Maven是毫無用處的——POM是Maven的核心。是POM實現的並驅動了這種以模型來描述的構建方式。

示例


下面的POM示例,是可能用於構建和測試一個項目的腳本。一個POM是一個XML文檔,看起來類似於如下的示例:
project
modelVersion4.0.0/modelVersion
groupIdcom.mycompany.app/groupId
artifactIdmy-app/artifactId
packagingjar/packaging
version1.0-SNAPSHOT/version
dependencies
dependency
groupIdjunit/groupId
artifactIdjunit/artifactId
version3.8.1/version
scopetest/scope
dependency
dependencies
project
此POM腳本允許編譯、測試以及生成基本的文檔。可能會問單憑這區區15行代碼是如何做到的,實際上這是一個十分好且基本的問題。答案在於Maven對於其Super POM(譯者註:意即所有POM腳本的父腳本)的隱匿調用。

規則


Maven的POM文檔帶有全部的Maven所鼓勵的默認規則,這類似於Java語言的java.lang.Object對象。
在Java里,所有對象都是java.lang.Object的子對象,同樣的,在Maven中,所有POM也都是一個Super POM的子腳本。這個Super POM乍一看可能會覺得恐怖,要記住的最關鍵一點是,Super POM包含了重要信息,因此不必在創建一個POM的時候重複這些信息。

包含元素


一個POM包含了關於項目的所有重要信息。之前提供的POM示例,非常簡單,但仍然顯示出了一個POM所包含的一些關鍵元素。
project:這是所有pom文件中的最頂級元素,一級根元素。
modelVersion:此必需的元素說明了本POM所使用的模型版本。模型本身的版本很少改變,雖然如此,但它仍然是必不可少的,以當Maven引入了新的特性或者其他模型變更的時候,確保穩定性。
groupId:本元素表示創建本項目的組織的唯一標識。groupId是一個項目的核心關鍵標識之一,它基於組織的完整屬性域名。
artifactId:表示本項目的主要項目的唯一基本名。一個典型的由Maven生成的項目名稱將會是如下的格式:artifactId-version.extension;,其他部分諸如源包也使用artifactId作為它們名稱的一部分。
packaging:表示本項目所使用的包類型(JAR,WAR,EAR等)。這不僅僅意味著將使用JAR,、WAR、EAR打包,也表明在作為構建流程一部分的,一個特定的生命周期。此生命周期是一個主題處理,會在本章的稍後提到。只要記住此選定的項目包扮演的是定製構建生命周期的角色。本元素的默認值是jar,因此在大多數情況下,不需要去特別指定。
version:表示項目的版本,Maven對於版本管理大有幫助,會經常看到一個版本的SNAPSHOT(快照),指示項目在開發中的不同狀態。
name:項目的顯示名稱,常用於Maven生成的文檔當中,並在構建過程中,為項目或其他的項目作為一種依賴使用。
url:項目的網站網址。
description:項目的介紹。