Maven POM文件

2018-04-20 12:02 更新

Maven教程 - Maven POM文件


POM代表項(xiàng)目對(duì)象模型。這是Maven的核心概念。

POM文件使用XML格式來聲明項(xiàng)目資源(如依賴項(xiàng))。

依賴關(guān)系是在項(xiàng)目中用作庫(kù)的JAR文件。

位于項(xiàng)目根目錄中的pom.xml包含對(duì)所有這些資源的引用。

由于 maven 在配置上是約定的,大多數(shù)情況下,我們只需要聲明工件的名稱,所以我們不需要指定Maven找到資源的絕對(duì)或相對(duì)路徑。Maven使用默認(rèn)目錄/文件夾布局。所有mavenized項(xiàng)目使用相同的目錄/文件夾來組織其源文件,資源文件。


Maven如何使用POM文件

Maven在以下步驟中使用pom.xml文件。

  • 閱讀pom.xml文件,解析內(nèi)容。
  • 下載對(duì)本地依賴關(guān)系庫(kù)的依賴。
  • 執(zhí)行生命周期/建立解析/目標(biāo)。
    例如,mvn 編譯將執(zhí)行編譯
    mvn測(cè)試將執(zhí)行所有單元測(cè)試用例
    mvn包將會(huì)編譯,然后執(zhí)行所有單元測(cè)試用例,最后將類文件壓縮到j(luò)ar/war/ear文件。
  • 執(zhí)行插件Maven插件是Maven核心的擴(kuò)展。有時(shí)我們需要使用插件來執(zhí)行特定于項(xiàng)目的特定任務(wù)。

什么是pom.xml文件

Maven POM文件(項(xiàng)目對(duì)象模型)pom.xml是描述項(xiàng)目資源的XML文件。

每個(gè)項(xiàng)目都有一個(gè)POM文件。POM文件名為pom.xml,應(yīng)位于項(xiàng)目的根目錄中。

pom.xml有關(guān)于項(xiàng)目和各種配置的聲明。

pom.xml文件也有目標(biāo)和插件。

POM文件描述了什么構(gòu)建,但不是如何構(gòu)建它。如何構(gòu)建它取決于Maven構(gòu)建階段和目標(biāo)。

我們可以將自定義操作(目標(biāo))添加到Maven構(gòu)建階段。

下表列出了可在POM中指定的一些配置。

項(xiàng)目描述
項(xiàng)目依賴庫(kù)JAR文件
plugins需要擴(kuò)展
構(gòu)建配置文件項(xiàng)目的自定義設(shè)置
項(xiàng)目版本項(xiàng)目的版本號(hào)。 如果pom.xml用于庫(kù),則版本號(hào)為用作庫(kù)版本號(hào)。
developers為構(gòu)建軟件的開發(fā)人員提供信息
郵件列表電子郵件地址

一個(gè)項(xiàng)目分為子項(xiàng)目通常有一個(gè)用于父項(xiàng)目的POM文件,和每個(gè)子項(xiàng)目的一個(gè)POM文件。

通過使用這種結(jié)構(gòu),我們可以在一個(gè)步驟中構(gòu)建整個(gè)項(xiàng)目,或者如果需要,我們可以單獨(dú)構(gòu)建子項(xiàng)目。

例子

這里是一個(gè)最小的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</groupId>
    <artifactId>artifactId</artifactId>
    <version>1.0.0</version>
</project>

在創(chuàng)建POM之前,我們應(yīng)該決定項(xiàng)目組( groupId ),項(xiàng)目名稱( artifactId )及其版本( version )。

這些屬性幫助我們?cè)诖鎯?chǔ)庫(kù)中唯一標(biāo)識(shí)項(xiàng)目。

在下面的代碼中,我們填寫groupId,它是項(xiàng)目組名稱,artifactId是項(xiàng)目名稱,以及項(xiàng)目版本。

<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.companyname.project-group</groupId>
   <artifactId>feeCalculation</artifactId>
   <version>1.0</version>
 
</project>

注意

所有POM文件都需要項(xiàng)目XML元素和三個(gè)必填字段: groupId , artifactId 版本。

存儲(chǔ)庫(kù)中的項(xiàng)目符號(hào)是 groupId:artifactId:version 。

modelVersion 元素設(shè)置POM模型的版本。它必須匹配您使用的Maven版本。版本4.0.0匹配Maven版本2和3。

groupId 元素是唯一的ID組織或項(xiàng)目。

通常我們使用類似于項(xiàng)目的根Java包名稱的組ID。

該項(xiàng)目將位于Maven倉(cāng)庫(kù)下與組ID匹配的目錄結(jié)構(gòu)。

每個(gè)替換為目錄分隔符,并且每個(gè)詞因此表示目錄。

然后,組ID com.yourCompany 將位于目錄中調(diào)用 MAVEN_REPO / com / yourCompany 。

MAVEN_REPO是Maven存儲(chǔ)庫(kù)的目錄路徑。

artifactId 元素包含項(xiàng)目的名稱。

工件ID用作組ID下的子目錄的名稱目錄,并且作為JAR文件名稱的一部分在建設(shè)項(xiàng)目時(shí)產(chǎn)生。

構(gòu)建結(jié)果,一個(gè)JAR,WAR或EAR文件,在Maven中被稱為工件。

versionId 元素包含項(xiàng)目的版本號(hào)。

項(xiàng)目的用戶可以通過使用來引用項(xiàng)目的特定版本 versionId 元素中的版本號(hào)。

版本號(hào)用作工件ID目錄下的子目錄的名稱。并作為構(gòu)建的工件的名稱的一部分。

版本號(hào)用作工件ID目錄下的子目錄的名稱。并作為構(gòu)建的工件的名稱的一部分。...

MAVEN_REPO / com / companyname / project-group / feeCalculation / 1.0.0 / feeCalculation-1.0.0.jar

如果你的項(xiàng)目使用Maven目錄結(jié)構(gòu),而你的項(xiàng)目沒有外部依賴,那么上述最小的POM文件就是你需要的構(gòu)建您的項(xiàng)目。

超級(jí)POM

如果你的項(xiàng)目使用Maven目錄結(jié)構(gòu),而你的項(xiàng)目沒有外部依賴,那么上述最小的POM文件就是你需要的構(gòu)建您的項(xiàng)目。...

此基本POM稱為超級(jí)POM,并且包含默認(rèn)情況下繼承的值。

此基本POM稱為超級(jí)POM,并且包含默認(rèn)情況下繼承的值。...

如果未指定超級(jí)POM,則POM文件從基本POM繼承。

如果未指定超級(jí)POM,則POM文件從基本POM繼承。...

Base POM
 |
 +---POM
 |
 |
 +---POM
 |    |
 |    +---POM
 |    |
 |    +---POM
 |    |
 |    +---POM
 |
 |
 +---POM

我們可以在POM文件中顯式設(shè)置一個(gè)超級(jí)POM文件來改變所有繼承POM的設(shè)置通過其共同的超級(jí)POM。

我們可以在POM文件中顯式設(shè)置一個(gè)超級(jí)POM文件來改變所有繼承POM的設(shè)置通過其共同的超級(jí)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>
    
        <parent>
        <groupId>org.oneproject.fee</groupId>
        <artifactId>my-parent</artifactId>
        <version>2.0</version>
        <relativePath>../my-parent</relativePath>
        </parent>
    

    <artifactId>my-project</artifactId>
    ...
</project>

繼承的POM文件可以覆蓋設(shè)置通過在繼承的POM文件中指定新設(shè)置從超級(jí)POM。

有效pom

Maven使用超級(jí)pom加項(xiàng)目配置的有效pom執(zhí)行相關(guān)目標(biāo)。

我們可以看看超級(jí)POM的默認(rèn)配置通過運(yùn)行以下命令:

mvn help:effective-pom
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)