1. 程式人生 > >Maven學習筆記(3)-Maven中POM.XML詳解

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,它包含了一些可以被繼承的預設設定。

  這一部分內容超出了本人的學習接受能力。有時間再補充吧。

四、參考連結