POM 代表工程对象模型。它是使用 Maven 工作时的基本组建,是一个 xml 文件。它被放在工程根目录下,文件命名为 pom.xml。

POM 包含了关于工程和各种配置细节的信息,Maven 使用这些信息构建工程。

POM 也包含了目标和插件。当执行一个任务或者目标时,Maven 会查找当前目录下的 POM,从其中读取所需要的配置信息,然后执行目标。能够在 POM 中设置的一些配置如下:

  • project dependencies
  • plugins
  • goals
  • build profiles
  • project version
  • developers
  • mailing list

在创建 POM 之前,我们首先确定工程组(groupId),及其名称(artifactId)和版本,在仓库中这些属性是工程的唯一标识。

POM 举例

  1. <project xmlns="http://maven.apache.org/POM/4.0.0"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
  4. http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <groupId>com.companyname.project-group</groupId>
  7. <artifactId>project</artifactId>
  8. <version>1.0</version>
  9. </project>

需要说明的是每个工程应该只有一个 POM 文件。

  • 所有的 POM 文件需要 project 元素和三个必须的字段:groupId, artifactId,version。
  • 在仓库中的工程标识为 groupId:artifactId:version
  • POM.xml 的根元素是 project,它有三个主要的子节点:
节点 描述
groupId 这是工程组的标识。它在一个组织或者项目中通常是唯一的。例如,一个银行组织 com.company.bank 拥有所有的和银行相关的项目。
artifactId 这是工程的标识。它通常是工程的名称。例如,消费者银行。groupId 和 artifactId 一起定义了 artifact 在仓库中的位置。
version 这是工程的版本号。在 artifact 的仓库中,它用来区分不同的版本。例如:
com.company.bank:consumer-banking:1.0
com.company.bank:consumer-banking:1.1.

Super POM

所有的 POM 都继承自一个父 POM(无论是否显式定义了这个父 POM)。父 POM 也被称作 Super POM,它包含了一些可以被继承的默认设置。

Maven 使用 effective pom(Super pom 加上工程自己的配置)来执行相关的目标,它帮助开发者在 pom.xml 中做尽可能少的配置,当然这些配置可以被方便的重写。

查看 Super POM 默认配置的一个简单方法是执行以下命令:mvn help:effective-pom

在你的电脑上的任意目录下创建一个 pom.xml 文件,使用上面提到的示例 pom 中的内容。

在下面的例子中,我们在 C:\MVN\project 目录中创建了一个 pom.xml 文件。

现在打开命令控制台,到 pom.xml 所在的目录下执行以下 mvn 命令。

  1. C:\MVN\project>mvn help:effective-pom

Maven 将会开始处理并显示 effective-pom。

  1. [INFO] Scanning for projects...
  2. [INFO] Searching repository for plugin with prefix: 'help'.
  3. [INFO] ------------------------------------------------------------------------
  4. [INFO] Building Unnamed - com.companyname.project-group:project-name:jar:1.0
  5. [INFO] task-segment: [help:effective-pom] (aggregator-style)
  6. [INFO] ------------------------------------------------------------------------
  7. [INFO] [help:effective-pom {execution: default-cli}]
  8. [INFO]
  9. .....
  10. [INFO] ------------------------------------------------------------------------
  11. [INFO] BUILD SUCCESSFUL
  12. [INFO] ------------------------------------------------------------------------
  13. [INFO] Total time: < 1 second
  14. [INFO] Finished at: Thu Jul 05 11:41:51 IST 2012
  15. [INFO] Final Memory: 6M/15M
  16. [INFO] ------------------------------------------------------------------------

Effective POM 的结果就像在控制台中显示的一样,经过继承、插值之后,使配置生效。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- ================================================================= -->
  3. <!-- -->
  4. <!-- Generated by Maven Help Plugin on 2012-07-05T11:41:51 -->
  5. <!-- See: http://maven.apache.org/plugins/maven-help-plugin/ -->
  6. <!-- -->
  7. <!-- ================================================================= -->
  8. <!-- ================================================================= -->
  9. <!-- -->
  10. <!-- Effective POM for project -->
  11. <!-- 'com.companyname.project-group:project-name:jar:1.0' -->
  12. <!-- -->
  13. <!-- ================================================================= -->
  14. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/
  15. 2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 h
  16. ttp://maven.apache.org/xsd/maven-4.0.0.xsd">
  17. <modelVersion>4.0.0</modelVersion>
  18. <groupId>com.companyname.project-group</groupId>
  19. <artifactId>project</artifactId>
  20. <version>1.0</version>
  21. <build>
  22. <sourceDirectory>C:\MVN\project\src\main\java</sourceDirectory>
  23. <scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>
  24. <testSourceDirectory>C:\MVN\project\src\test\java</testSourceDirectory>
  25. <outputDirectory>C:\MVN\project\target\classes</outputDirectory>
  26. <testOutputDirectory>C:\MVN\project\target\test-classes</testOutputDirectory>
  27. <resources>
  28. <resource>
  29. <mergeId>resource-0</mergeId>
  30. <directory>C:\MVN\project\src\main\resources</directory>
  31. </resource>
  32. </resources>
  33. <testResources>
  34. <testResource>
  35. <mergeId>resource-1</mergeId>
  36. <directory>C:\MVN\project\src\test\resources</directory>
  37. </testResource>
  38. </testResources>
  39. <directory>C:\MVN\project\target</directory>
  40. <finalName>project-1.0</finalName>
  41. <pluginManagement>
  42. <plugins>
  43. <plugin>
  44. <artifactId>maven-antrun-plugin</artifactId>
  45. <version>1.3</version>
  46. </plugin>
  47. <plugin>
  48. <artifactId>maven-assembly-plugin</artifactId>
  49. <version>2.2-beta-2</version>
  50. </plugin>
  51. <plugin>
  52. <artifactId>maven-clean-plugin</artifactId>
  53. <version>2.2</version>
  54. </plugin>
  55. <plugin>
  56. <artifactId>maven-compiler-plugin</artifactId>
  57. <version>2.0.2</version>
  58. </plugin>
  59. <plugin>
  60. <artifactId>maven-dependency-plugin</artifactId>
  61. <version>2.0</version>
  62. </plugin>
  63. <plugin>
  64. <artifactId>maven-deploy-plugin</artifactId>
  65. <version>2.4</version>
  66. </plugin>
  67. <plugin>
  68. <artifactId>maven-ear-plugin</artifactId>
  69. <version>2.3.1</version>
  70. </plugin>
  71. <plugin>
  72. <artifactId>maven-ejb-plugin</artifactId>
  73. <version>2.1</version>
  74. </plugin>
  75. <plugin>
  76. <artifactId>maven-install-plugin</artifactId>
  77. <version>2.2</version>
  78. </plugin>
  79. <plugin>
  80. <artifactId>maven-jar-plugin</artifactId>
  81. <version>2.2</version>
  82. </plugin>
  83. <plugin>
  84. <artifactId>maven-javadoc-plugin</artifactId>
  85. <version>2.5</version>
  86. </plugin>
  87. <plugin>
  88. <artifactId>maven-plugin-plugin</artifactId>
  89. <version>2.4.3</version>
  90. </plugin>
  91. <plugin>
  92. <artifactId>maven-rar-plugin</artifactId>
  93. <version>2.2</version>
  94. </plugin>
  95. <plugin>
  96. <artifactId>maven-release-plugin</artifactId>
  97. <version>2.0-beta-8</version>
  98. </plugin>
  99. <plugin>
  100. <artifactId>maven-resources-plugin</artifactId>
  101. <version>2.3</version>
  102. </plugin>
  103. <plugin>
  104. <artifactId>maven-site-plugin</artifactId>
  105. <version>2.0-beta-7</version>
  106. </plugin>
  107. <plugin>
  108. <artifactId>maven-source-plugin</artifactId>
  109. <version>2.0.4</version>
  110. </plugin>
  111. <plugin>
  112. <artifactId>maven-surefire-plugin</artifactId>
  113. <version>2.4.3</version>
  114. </plugin>
  115. <plugin>
  116. <artifactId>maven-war-plugin</artifactId>
  117. <version>2.1-alpha-2</version>
  118. </plugin>
  119. </plugins>
  120. </pluginManagement>
  121. <plugins>
  122. <plugin>
  123. <artifactId>maven-help-plugin</artifactId>
  124. <version>2.1.1</version>
  125. </plugin>
  126. </plugins>
  127. </build>
  128. <repositories>
  129. <repository>
  130. <snapshots>
  131. <enabled>false</enabled>
  132. </snapshots>
  133. <id>central</id>
  134. <name>Maven Repository Switchboard</name>
  135. <url>http://repo1.maven.org/maven2</url>
  136. </repository>
  137. </repositories>
  138. <pluginRepositories>
  139. <pluginRepository>
  140. <releases>
  141. <updatePolicy>never</updatePolicy>
  142. </releases>
  143. <snapshots>
  144. <enabled>false</enabled>
  145. </snapshots>
  146. <id>central</id>
  147. <name>Maven Plugin Repository</name>
  148. <url>http://repo1.maven.org/maven2</url>
  149. </pluginRepository>
  150. </pluginRepositories>
  151. <reporting>
  152. <outputDirectory>C:\MVN\project\target/site</outputDirectory>
  153. </reporting>
  154. </project>

在上面的 pom.xml 中,你可以看到 Maven 在执行目标时需要用到的默认工程源码目录结构、输出目录、需要的插件、仓库和报表目录。

Maven 的 pom.xml 文件也不需要手工编写。

Maven 提供了大量的原型插件来创建工程,包括工程结构和 pom.xml。

maven 学习---POM机制的更多相关文章

  1. maven学习pom

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  2. Maven学习小结(五 pom.xml详解[转])

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  3. JavaEE学习之Maven配置文件pom.xml详解(转)

    一.引言 (本文转载自:http://blog.csdn.net/longeremmy/article/details/9670619) 使用maven有一些时间了,一直没有好好将pom配置文件每个节 ...

  4. Maven学习总结(十一)——Maven项目对象模型pom.xml文件详解

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  5. Maven学习总结(20)——Maven pom.xml配置再体会

    Maven的pom.xml配置文件详解 <!--父项目的坐标.如果项目中没有规定某个元素的值,那么父项目中的对应值即为项目的默认值. 坐标包括group ID,artifact ID和 vers ...

  6. Maven学习总结(15)——Maven 项目中pom.xml详解

    <project xmlns="http://maven.apache.org/POM/4.0.0"  xmlns:xsi="http://www.w3.org/2 ...

  7. 【maven学习】pom.xml文件详解

    环境 apache-maven-3.6.1 jdk 1.8 eclipse 4.7 POM是项目对象模型(Project Object Model)的简称,它是Maven项目中的文件,使用XML表示, ...

  8. Maven学习笔记:POM标签大全详解

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  9. maven学习(3)pom.xml文件说明以及常用指令

    pom.xml文件的结构: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http:/ ...

随机推荐

  1. Asp.Net Core 开发之旅之NLog日志

    NLog已是日志库的一员大佬,使用也简单方便,本文介绍的环境是居于.NET CORE 3.0 1.安装 Install-Package NLog.Web.AspNetCore 2.创建配置文件 在we ...

  2. MySQL 主从复制(实时热备)原理与配置

    MySQL是现在普遍使用的数据库,但是如果宕机了必然会造成数据丢失.为了保证MySQL数据库的可靠性,就要会一些提高可靠性的技术.MySQL主从复制可以做到实时热备数据.本文介绍MySQL主从复制原理 ...

  3. Windows | Ubuntu18.04分别安装Matlab 2017b破解版

    首先下载好Windows和Ubuntu 版本的MATLAB 2017b 安装包, 1.Windows上安装,解压文件R2017b_win64_dvd1.iso和R2017b_win64_dvd2.is ...

  4. RC4 对称加密

    public class RC4 { byte[] s = new byte[256]; byte[] key; byte keylen;// 4 ~ 16 int pi = 0; int pj = ...

  5. 在python的虚拟环境venv中使用gunicorn

    昨天遇到的问题,一个服务器上有好几个虚拟机环境. 我active进一个虚拟环境,安装了新的三方库之后, 使用gunicorn启动django服务, 但还是死活提示没有安装这个三方库. 一开始没有找到原 ...

  6. 【cf995】F. Cowmpany Cowmpensation(拉格朗日插值)

    传送门 题意: 给出一颗树,每个结点有取值范围\([1,D]\). 现在有限制条件:对于一个子树,根节点的取值要大于等于子数内各结点的取值. 问有多少种取值方案. 思路: 手画一下发现,对于一颗大小为 ...

  7. Pwnable-bof

    Download : http://pwnable.kr/bin/bof Download : http://pwnable.kr/bin/bof.c 下载之后,先看看c源码 #include < ...

  8. Pwn-level1

    题目地址 https://dn.jarvisoj.com/challengefiles/level1.80eacdcd51aca92af7749d96efad7fb5 先看一下文件的类型和保护机制   ...

  9. mysql 高级查询三

    alter table my_class add id varchar(10);alter table my_class change id id varchar(10) first;alter ta ...

  10. imutils.path

    from imutils import paths # 要在哪条路径下查找 path = '...' # 查找图片,得到图片路径 imagePaths = list(imutils.paths.lis ...