maven中pom.xml詳細(xì)介紹
POM 代表工程對(duì)象模型。它是使用 Maven 工作時(shí)的基本組建,是一個(gè) xml 文件。它被放在工程根目錄下,文件命名為 pom.xml。
POM 包含了關(guān)于工程和各種配置細(xì)節(jié)的信息,Maven 使用這些信息構(gòu)建工程。
POM 也包含了目標(biāo)和插件。當(dāng)執(zhí)行一個(gè)任務(wù)或者目標(biāo)時(shí),Maven 會(huì)查找當(dāng)前目錄下的 POM,從其中讀取所需要的配置信息,然后執(zhí)行目標(biāo)。能夠在 POM 中設(shè)置的一些配置如下:
project dependencies
plugins
goals
build profiles
project version
developers
mailing list
在創(chuàng)建 POM 之前,我們首先確定工程組(groupId),及其名稱(artifactId)和版本,在倉(cāng)庫(kù)中這些屬性是工程的唯一標(biāo)識(shí)。
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>com.companyname.project-group</groupId> <artifactId>project</artifactId> <version>1.0</version> </project>
需要說(shuō)明的是每個(gè)工程應(yīng)該只有一個(gè) POM 文件。
所有的 POM 文件需要 project 元素和三個(gè)必須的字段:groupId, artifactId,version。
在倉(cāng)庫(kù)中的工程標(biāo)識(shí)為 groupId:artifactId:version
POM.xml 的根元素是 project,它有三個(gè)主要的子節(jié)點(diǎn):
| 節(jié)點(diǎn) | 描述 |
|---|---|
| groupId | 這是工程組的標(biāo)識(shí)。它在一個(gè)組織或者項(xiàng)目中通常是唯一的。例如,一個(gè)銀行組織 com.company.bank 擁有所有的和銀行相關(guān)的項(xiàng)目。 |
| artifactId | 這是工程的標(biāo)識(shí)。它通常是工程的名稱。例如,消費(fèi)者銀行。groupId 和 artifactId 一起定義了 artifact 在倉(cāng)庫(kù)中的位置。 |
| version | 這是工程的版本號(hào)。在 artifact 的倉(cāng)庫(kù)中,它用來(lái)區(qū)分不同的版本。例如: com.company.bank:consumer-banking:1.0 com.company.bank:consumer-banking:1.1. |
Super POM
所有的 POM 都繼承自一個(gè)父 POM(無(wú)論是否顯式定義了這個(gè)父 POM)。父 POM 也被稱作 Super POM,它包含了一些可以被繼承的默認(rèn)設(shè)置。
Maven 使用 effective pom(Super pom 加上工程自己的配置)來(lái)執(zhí)行相關(guān)的目標(biāo),它幫助開發(fā)者在 pom.xml 中做盡可能少的配置,當(dāng)然這些配置可以被方便的重寫。
查看 Super POM 默認(rèn)配置的一個(gè)簡(jiǎn)單方法是執(zhí)行以下命令:mvn help:effective-pom
在你的電腦上的任意目錄下創(chuàng)建一個(gè) pom.xml 文件,使用上面提到的示例 pom 中的內(nèi)容。
在下面的例子中,我們?cè)?C:\MVN\project 目錄中創(chuàng)建了一個(gè) pom.xml 文件。
現(xiàn)在打開命令控制臺(tái),到 pom.xml 所在的目錄下執(zhí)行以下 mvn 命令。
C:\MVN\project>mvn help:effective-pom
Maven 將會(huì)開始處理并顯示 effective-pom。
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'help'.
[INFO] ------------------------------------------------------------------------
[INFO] Building Unnamed - com.companyname.project-group:project-name:jar:1.0
[INFO] task-segment: [help:effective-pom] (aggregator-style)
[INFO] ------------------------------------------------------------------------
[INFO] [help:effective-pom {execution: default-cli}]
[INFO]
.....
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: < 1 second
[INFO] Finished at: Thu Jul 05 11:41:51 IST 2012
[INFO] Final Memory: 6M/15M
[INFO] ------------------------------------------------------------------------
Effective POM 的結(jié)果就像在控制臺(tái)中顯示的一樣,經(jīng)過(guò)繼承、插值之后,使配置生效。
<?xml version="1.0" encoding="UTF-8"?>
<!-- ================================================================= -->
<!-- -->
<!-- Generated by Maven Help Plugin on 2012-07-05T11:41:51 -->
<!-- See: http://maven.apache.org/plugins/maven-help-plugin/ -->
<!-- -->
<!-- ================================================================= -->
<!-- ================================================================= -->
<!-- -->
<!-- Effective POM for project -->
<!-- 'com.companyname.project-group:project-name:jar:1.0' -->
<!-- -->
<!-- ================================================================= -->
<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 h
ttp://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.project-group</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<build>
<sourceDirectory>C:\MVN\project\src\main\java</sourceDirectory>
<scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>
<testSourceDirectory>C:\MVN\project\src\test\java</testSourceDirectory>
<outputDirectory>C:\MVN\project\target\classes</outputDirectory>
<testOutputDirectory>C:\MVN\project\target\test-classes</testOutputDirectory>
<resources>
<resource>
<mergeId>resource-0</mergeId>
<directory>C:\MVN\project\src\main\resources</directory>
</resource>
</resources>
<testResources>
<testResource>
<mergeId>resource-1</mergeId>
<directory>C:\MVN\project\src\test\resources</directory>
</testResource>
</testResources>
<directory>C:\MVN\project\target</directory>
<finalName>project-1.0</finalName>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.3</version>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-2</version>
</plugin>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>2.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
</plugin>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.0</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.4</version>
</plugin>
<plugin>
<artifactId>maven-ear-plugin</artifactId>
<version>2.3.1</version>
</plugin>
<plugin>
<artifactId>maven-ejb-plugin</artifactId>
<version>2.1</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.2</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>2.2</version>
</plugin>
<plugin>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.5</version>
</plugin>
<plugin>
<artifactId>maven-plugin-plugin</artifactId>
<version>2.4.3</version>
</plugin>
<plugin>
<artifactId>maven-rar-plugin</artifactId>
<version>2.2</version>
</plugin>
<plugin>
<artifactId>maven-release-plugin</artifactId>
<version>2.0-beta-8</version>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.3</version>
</plugin>
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>2.0-beta-7</version>
</plugin>
<plugin>
<artifactId>maven-source-plugin</artifactId>
<version>2.0.4</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.4.3</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.1-alpha-2</version>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<artifactId>maven-help-plugin</artifactId>
<version>2.1.1</version>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>Maven Repository Switchboard</name>
<url>http://repo1.maven.org/maven2</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<releases>
<updatePolicy>never</updatePolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>Maven Plugin Repository</name>
<url>http://repo1.maven.org/maven2</url>
</pluginRepository>
</pluginRepositories>
<reporting>
<outputDirectory>C:\MVN\project\target/site</outputDirectory>
</reporting>
</project>
在上面的 pom.xml 中,你可以看到 Maven 在執(zhí)行目標(biāo)時(shí)需要用到的默認(rèn)工程源碼目錄結(jié)構(gòu)、輸出目錄、需要的插件、倉(cāng)庫(kù)和報(bào)表目錄。
Maven 的 pom.xml 文件也不需要手工編寫。
Maven 提供了大量的原型插件來(lái)創(chuàng)建工程,包括工程結(jié)構(gòu)和 pom.xml。
總結(jié)
以上就是本文關(guān)于maven中pom.xml詳細(xì)介紹的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:Maven構(gòu)建生命周期詳細(xì)介紹、Maven管理SpringBoot Profile詳解、maven學(xué)習(xí)-初窺門徑等,有什么問(wèn)題可以隨時(shí)留言,歡迎大家留下寶貴的意見,小編會(huì)及時(shí)修改。感謝朋友們對(duì)本站的支持!
相關(guān)文章
SpringBoot整合MongoDB實(shí)現(xiàn)文件上傳下載刪除
這篇文章主要介紹了SpringBoot整合MongoDB實(shí)現(xiàn)文件上傳下載刪除的方法,幫助大家更好的理解和學(xué)習(xí)使用SpringBoot框架,感興趣的朋友可以了解下2021-05-05
java針對(duì)電話號(hào)碼正則匹配實(shí)例
這篇文章主要介紹了java針對(duì)電話號(hào)碼正則匹配的方法,涉及java正則匹配與字符串操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07
java中g(shù)radle項(xiàng)目報(bào)錯(cuò)org.gradle?.api.plugins.MavenPlugin解決辦法
在使用Gradle時(shí)開發(fā)者可能會(huì)遇到org.gradle?.api.plugins.MavenPlugin報(bào)錯(cuò)提醒,這篇文章主要給大家介紹了關(guān)于java中g(shù)radle項(xiàng)目報(bào)錯(cuò)org.gradle?.api.plugins.MavenPlugin的解決辦法,需要的朋友可以參考下2023-12-12
詳解Java的call by value和call by reference
在本篇文章里小編給大家總結(jié)了關(guān)于Java的call by value和call by reference的相關(guān)用法和知識(shí)點(diǎn)內(nèi)容,需要的朋友們學(xué)習(xí)下。2019-03-03
springboot實(shí)現(xiàn)定時(shí)任務(wù)@Scheduled方式
這篇文章主要介紹了springboot實(shí)現(xiàn)定時(shí)任務(wù)@Scheduled方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07
Sharding-JDBC自動(dòng)實(shí)現(xiàn)MySQL讀寫分離的示例代碼
本文主要介紹了Sharding-JDBC自動(dòng)實(shí)現(xiàn)MySQL讀寫分離,優(yōu)點(diǎn)在于數(shù)據(jù)源完全有Sharding-JDBC托管,寫操作自動(dòng)執(zhí)行master庫(kù),讀操作自動(dòng)執(zhí)行slave庫(kù),感興趣的可以了解一下2021-11-11
Java中實(shí)現(xiàn)接口與繼承的區(qū)別及說(shuō)明
這篇文章主要介紹了Java中實(shí)現(xiàn)接口與繼承的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03

