Maven學習筆記(3)-Maven中POM.XML詳解
目錄
一、介紹POM
Maven之前的構建工具有Make和Ant,其中Make依賴構建指令碼Makefile,Ant依賴構建指令碼build.xml。同理,Maven專案也依賴構建指令碼。
POM(Project Object Model,專案物件模型)是Maven 專案中的基本單元,它是一個 xml 檔案,被放在工程根目錄下。該xml 檔案的名字,在Maven 1中叫做project.xml,在Maven 2和Maven 3中重新命名為pom.xml。在pom.xml中定義了Maven專案的基本資訊、描述專案如何構建、宣告專案的依賴等。
執行任務或目標時,Maven會在當前目錄中查詢POM。它讀取POM,獲取所需的配置資訊,然後執行目標。
應該如何書寫pom.xml檔案呢? Maven的官方網址上給出了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 >
<!-- The Basics -->
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<packaging>...</packaging>
<dependencies>...</dependencies>
<parent>...</parent>
<dependencyManagement>...</dependencyManagement >
<modules>...</modules>
<properties>...</properties>
<!-- Build Settings -->
<build>...</build>
<reporting>...</reporting>
<!-- More Project Information -->
<name>...</name>
<description>...</description>
<url>...</url>
<inceptionYear>...</inceptionYear>
<licenses>...</licenses>
<organization>...</organization>
<developers>...</developers>
<contributors>...</contributors>
<!-- Environment Settings -->
<issueManagement>...</issueManagement>
<ciManagement>...</ciManagement>
<mailingLists>...</mailingLists>
<scm>...</scm>
<prerequisites>...</prerequisites>
<repositories>...</repositories>
<pluginRepositories>...</pluginRepositories>
<distributionManagement>...</distributionManagement>
<profiles>...</profiles>
</project>
二、編寫POM
根據Maven的官方給出POM檔案結構。可以寫一個非常簡單的pom.xml檔案,用於講解pom.xml中基本元素的含義。在任意目錄下新建一個pom.xml檔案,用notepad++開啟(程式碼可以高亮顯示),輸入如下內容:
<?xml version ="1.0" encoding="UTF-8"?>
<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>com.yonyou.dst</groupId>
<artifactId>WEB-OP</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Hello_Maven</name>
<description>My First Maven Project</description>
<project>
pom.xml中第一行程式碼是XML頭,指明該xml文件的版本和編碼方式。其他元素詳解如下:
元素 | 描述 |
---|---|
project | project元素是pom.xml的根元素,它聲明瞭POM的名稱空間和xsd元素等。 |
modelVersion | modelVersion指定了當前POM模型的版本,對於Maven 2和Maven 3來說,它只能是“4.0.0”。 |
groupId | 座標元素之一。定義了專案所在的組,組通常和該專案所在的公司和組織有關。groupId一般分為多個段。以兩段為例:第一段為域,第二段為公司名稱。域又分為org、com、cn等等,其中org為非營利組織,com為商業組織。比如apache公司的tomcat專案中,groupId的值是org.apache,它的域是org(因為tomcat是非營利專案),公司名稱是apache。如果一個公司有很多部門,可以把groupId寫成三段式,第三段用於描述部門。 當建立一個pom.xml僅僅用於學習時,可將groupId設定為cn.gng(其中cn表示域為中國,gng是個人姓名縮寫)。 |
artifactId | 座標元素之一。專案的標識,它通常是專案的名稱。比如apache公司的tomcat專案中,artifactId是tomcat。 |
version | 座標元素之一。就是專案當前的版本。很多專案的版本都為”0.0.1-SNAPSHOT”,其中SNAPSHOT的意思是”快照”,說明該專案處於開發中,是不穩定的版本。專案升級後,version的值可變為:1.1、1.2-SNAPSHOT等。 |
packaging | 座標元素之一。packaging元素決定了專案的打包方式。如不寫packaging,則預設值為jar,Maven會幫我們生成一個JAR包;如果你定義該元素的值為war,Maven會幫我們生成一個WAR包;如果定義其值為POM(比如是一個父模組),那什麼包都不會生成。除此之外,Maven預設還支援一些其他的流行打包格式,例如ejb3和ear。 |
name | 聲明瞭一個對使用者更為友好的專案名稱,這個元素不是必須的。但最好還是給每個pom.xml檔案宣告name,方便資訊交流。 |
description | 作用和name元素類似,對專案進行描述。 |
注意:每個專案有且僅有一個POM檔案。其中, groupId、artifactId和version,是非常重要的三個元素,也是必不可少的元素。因為他們定義了整個專案在Maven世界中的座標。在Maven的世界中,任何jar、pom、war都是基於這些座標來進行定位和區分的。強烈建議,建立一個POM之前,應該要先決定groupId、artifactId和version的值。
三、超級POM
所有的 POM 都繼承自一個父 POM(無論是否顯式定義了這個父 POM)。父 POM 也被稱作 Super POM,它包含了一些可以被繼承的預設設定。
這一部分內容超出了本人的學習接受能力。有時間再補充吧。