一、什么是pom
pom代表项目对象模型,它是Maven中工作的基本组成单位。它是一个XML文件,始终保存在项目的基本目录中的pom.xml文件中。pom包含的对象是使用maven来构建的,pom.xml文件包含了项目的各种配置信息。 创建一个POM之前,应该要先决定项目组(groupId),项目名(artifactId)和版本(version),因为这些属性在项目仓库是唯一标识的。需要特别注意,每个项目都只有一个pom.xml文件。

二、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. <!-- 基本配置 -->
  7. <groupId>...</groupId>
  8. <artifactId>...</artifactId>
  9. <version>...</version>
  10. <packaging>...</packaging>
  11. <!-- 依赖配置 -->
  12. <dependencies>...</dependencies>
  13. <parent>...</parent>
  14. <dependencyManagement>...</dependencyManagement>
  15. <modules>...</modules>
  16. <properties>...</properties>
  17. <!-- 构建配置 -->
  18. <build>...</build>
  19. <reporting>...</reporting>
  20. <!-- 项目信息 -->
  21. <name>...</name>
  22. <description>...</description>
  23. <url>...</url>
  24. <inceptionYear>...</inceptionYear>
  25. <licenses>...</licenses>
  26. <organization>...</organization>
  27. <developers>...</developers>
  28. <contributors>...</contributors>
  29. <!-- 环境设置 -->
  30. <issueManagement>...</issueManagement>
  31. <ciManagement>...</ciManagement>
  32. <mailingLists>...</mailingLists>
  33. <scm>...</scm>
  34. <prerequisites>...</prerequisites>
  35. <repositories>...</repositories>
  36. <pluginRepositories>...</pluginRepositories>
  37. <distributionManagement>...</distributionManagement>
  38. <profiles>...</profiles>
  39. </project>

三、各节点解释说明
1.基本配置信息

  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. <!-- pom模型版本,maven2和3只能为4.0.0-->
  6. <modelVersion>4.0.0</modelVersion>
  7. <!-- 项目的组ID,用于maven定位-->
  8. <groupId>com.company.bank</groupId>
  9. <!-- 项目ID,通常是项目的名称,唯一标识符-->
  10. <artifactId>parent</artifactId>
  11. <!-- 项目的版本-->
  12. <version>1.0</version>
  13. <!-- 项目的打包方式-->
  14. <packaging>war</packaging>
  15. <project>
节点  
modelVersion
pom模型版本,maven2和3只能为4.0.0
groupId 这是项目组的编号,这在组织或项目中通常是独一无二的。 例如,一家银行集团com.company.bank拥有所有银行相关项目。
artifactId
这是项目的ID。这通常是项目的名称。 例如,consumer-banking。 除了groupId之外,artifactId还定义了artifact在存储库中的位置。
version 这是项目的版本。与groupId一起使用,artifact在存储库中用于将版本彼此分离。 例如:com.company.bank:consumer-banking:1.0,com.company.bank:consumer-banking:1.1
packaging 项目打包方式,有以下值:pom, jar, maven-plugin, ejb, war, ear, rar, par
   

2.依赖配置
(1) dependencies
项目相关依赖配置,如果在父项目写的依赖,会被子项目引用。一般会在父项目中定义子项目中所有共用的依赖。

  1. <dependencies>
  2. <dependency>
  3. <groupId>junit</groupId>
  4. <artifactId>junit</artifactId>
  5. <version>4.12</version>
  6. </dependency>
  7. </dependencies>

(2)parent
用于确定父项目的坐标位置。

  1. <parent>
  2. <groupId>com.learnPro</groupId>
  3. <artifactId>SIP-parent</artifactId>
  4. <relativePath></relativePath>
  5. <version>0.0.1-SNAPSHOT</version>
  6. </parent>
  • groupId: 父项目的组Id标识符
  • artifactId:父项目的唯一标识符
  • relativePath:Maven首先在当前项目中找父项目的pom,然后在文件系统的这个位置(relativePath),然后在本地仓库,再在远程仓库找。

version: 父项目的版本

(3) modules
有些maven项目会做成多模块的,这个标签用于指定当前项目所包含的所有模块。之后对这个项目进行的maven操作,会让所有子模块也进行相同操作。

  1. <modules>
  2. <module>com-a</>
  3. <module>com-b</>
  4. <module>com-c</>
  5. <modules/>

(4) properties
用于定义pom常量

  1. <properties>
  2. <java.version>1.7</java.version>
  3. </properties>

上面这个常量可以在pom文件的任意地方通过${Java.version}来引用

(5)dependencyManagement
配置写法同dependencies

  1. <dependencyManagement>
  2. <dependencies>
  3. .....
  4. </dependencies>
  5. </dependencyManagement>

在父模块中定义后,子模块不会直接使用对应依赖,但是在使用相同依赖的时候可以不加版本号,这样的好处是,父项目统一了版本,而且子项目可以在需要的时候才引用对应的依赖。

  1. 父项目:
  2. <dependencyManagement>
  3. <dependencies>
  4. <dependency>
  5. <groupId>junit</groupId>
  6. <artifactId>junit</artifactId>
  7. <version>4.12</version>
  8. <scope>test</scope>
  9. </dependency>
  10. </dependencies>
  11. </dependencyManagement>
  12. 子项目:
  13. <dependency>
  14. <groupId>junit</groupId>
  15. <artifactId>junit</artifactId>
  16. </dependency>

3.构建配置

  1. <build>
  2. <!--该元素设置了项目源码目录,当构建项目的时候,构建系统会编译目录里的源码。该路径是相对于pom.xml的相对路径。-->
  3. <sourceDirectory/>
  4. <!--该元素设置了项目脚本源码目录,该目录和源码目录不同:绝大多数情况下,该目录下的内容 会被拷贝到输出目录(因为脚本是被解释的,而不是被编译的)。-->
  5. <scriptSourceDirectory/>
  6. <!--该元素设置了项目单元测试使用的源码目录,当测试项目的时候,构建系统会编译目录里的源码。该路径是相对于pom.xml的相对路径。-->
  7. <testSourceDirectory/>
  8. <!--被编译过的应用程序class文件存放的目录。-->
  9. <outputDirectory/>
  10. <!--被编译过的测试class文件存放的目录。-->
  11. <testOutputDirectory/>
  12. <!--使用来自该项目的一系列构建扩展-->
  13. <extensions>
  14. <!--描述使用到的构建扩展。-->
  15. <extension>
  16. <!--构建扩展的groupId-->
  17. <groupId/>
  18. <!--构建扩展的artifactId-->
  19. <artifactId/>
  20. <!--构建扩展的版本-->
  21. <version/>
  22. </extension>
  23. </extensions>
  24. <!--当项目没有规定目标(Maven2 叫做阶段)时的默认值-->
  25. <defaultGoal/>
  26. <!--这个元素描述了项目相关的所有资源路径列表,例如和项目相关的属性文件,这些资源被包含在最终的打包文件里。-->
  27. <resources>
  28. <!--这个元素描述了项目相关或测试相关的所有资源路径-->
  29. <resource>
  30. <!-- 描述了资源的目标路径。该路径相对target/classes目录(例如${project.build.outputDirectory})。举个例 子,如果你想资源在特定的包里(org.apache.maven.messages),你就必须该元素设置为org/apache/maven /messages。然而,如果你只是想把资源放到源码目录结构里,就不需要该配置。-->
  31. <targetPath/>
  32. <!--是否使用参数值代替参数名。参数值取自properties元素或者文件里配置的属性,文件在filters元素里列出。-->
  33. <filtering/>
  34. <!--描述存放资源的目录,该路径相对POM路径-->
  35. <directory/>
  36. <!--包含的模式列表,例如**/*.xml.-->
  37. <includes/>
  38. <!--排除的模式列表,例如**/*.xml-->
  39. <excludes/>
  40. </resource>
  41. </resources>
  42. <!--这个元素描述了单元测试相关的所有资源路径,例如和单元测试相关的属性文件。-->
  43. <testResources>
  44. <!--这个元素描述了测试相关的所有资源路径,参见build/resources/resource元素的说明-->
  45. <testResource>
  46. <targetPath/><filtering/><directory/><includes/><excludes/>
  47. </testResource>
  48. </testResources>
  49. <!--构建产生的所有文件存放的目录-->
  50. <directory/>
  51. <!--产生的构件的文件名,默认值是${artifactId}-${version}。-->
  52. <finalName/>
  53. <!--当filtering开关打开时,使用到的过滤器属性文件列表-->
  54. <filters/>
  55. <!--子项目可以引用的默认插件信息。该插件配置项直到被引用时才会被解析或绑定到生命周期。给定插件的任何本地配置都会覆盖这里的配置-->
  56. <pluginManagement>
  57. <!--使用的插件列表 。-->
  58. <plugins>
  59. <!--plugin元素包含描述插件所需要的信息。-->
  60. <plugin>
  61. <!--插件在仓库里的group ID-->
  62. <groupId/>
  63. <!--插件在仓库里的artifact ID-->
  64. <artifactId/>
  65. <!--被使用的插件的版本(或版本范围)-->
  66. <version/>
  67. <!--是否从该插件下载Maven扩展(例如打包和类型处理器),由于性能原因,只有在真需要下载时,该元素才被设置成enabled。-->
  68. <extensions/>
  69. <!--在构建生命周期中执行一组目标的配置。每个目标可能有不同的配置。-->
  70. <executions>
  71. <!--execution元素包含了插件执行需要的信息-->
  72. <execution>
  73. <!--执行目标的标识符,用于标识构建过程中的目标,或者匹配继承过程中需要合并的执行目标-->
  74. <id/>
  75. <!--绑定了目标的构建生命周期阶段,如果省略,目标会被绑定到源数据里配置的默认阶段-->
  76. <phase/>
  77. <!--配置的执行目标-->
  78. <goals/>
  79. <!--配置是否被传播到子POM-->
  80. <inherited/>
  81. <!--作为DOM对象的配置-->
  82. <configuration/>
  83. </execution>
  84. </executions>
  85. <!--项目引入插件所需要的额外依赖-->
  86. <dependencies>
  87. <!--参见dependencies/dependency元素-->
  88. <dependency>
  89. ......
  90. </dependency>
  91. </dependencies>
  92. <!--任何配置是否被传播到子项目-->
  93. <inherited/>
  94. <!--作为DOM对象的配置-->
  95. <configuration/>
  96. </plugin>
  97. </plugins>
  98. </pluginManagement>
  99. <!--使用的插件列表-->
  100. <plugins>
  101. <!--参见build/pluginManagement/plugins/plugin元素-->
  102. <plugin>
  103. <groupId/><artifactId/><version/><extensions/>
  104. <executions>
  105. <execution>
  106. <id/><phase/><goals/><inherited/><configuration/>
  107. </execution>
  108. </executions>
  109. <dependencies>
  110. <!--参见dependencies/dependency元素-->
  111. <dependency>
  112. ......
  113. </dependency>
  114. </dependencies>
  115. <goals/><inherited/><configuration/>
  116. </plugin>
  117. </plugins>
  118. </build>

4.reporting
该元素描述使用报表插件产生报表的规范。当用户执行“mvn site”,这些报表就会运行。 在页面导航栏能看到所有报表的链接。

  1. <reporting>
  2. <!--true,则,网站不包括默认的报表。这包括“项目信息”菜单中的报表。-->
  3. <excludeDefaults/>
  4. <!--所有产生的报表存放到哪里。默认值是${project.build.directory}/site。-->
  5. <outputDirectory/>
  6. <!--使用的报表插件和他们的配置。-->
  7. <plugins>
  8. <!--plugin元素包含描述报表插件需要的信息-->
  9. <plugin>
  10. <!--报表插件在仓库里的group ID-->
  11. <groupId/>
  12. <!--报表插件在仓库里的artifact ID-->
  13. <artifactId/>
  14. <!--被使用的报表插件的版本(或版本范围)-->
  15. <version/>
  16. <!--任何配置是否被传播到子项目-->
  17. <inherited/>
  18. <!--报表插件的配置-->
  19. <configuration/>
  20. <!--一组报表的多重规范,每个规范可能有不同的配置。一个规范(报表集)对应一个执行目标 。例如,有1,2,3,4,5,6,7,8,9个报表。1,2,5构成A报表集,对应一个执行目标。2,5,8构成B报表集,对应另一个执行目标-->
  21. <reportSets>
  22. <!--表示报表的一个集合,以及产生该集合的配置-->
  23. <reportSet>
  24. <!--报表集合的唯一标识符,POM继承时用到-->
  25. <id/>
  26. <!--产生报表集合时,被使用的报表的配置-->
  27. <configuration/>
  28. <!--配置是否被继承到子POMs-->
  29. <inherited/>
  30. <!--这个集合里使用到哪些报表-->
  31. <reports/>
  32. </reportSet>
  33. </reportSets>
  34. </plugin>
  35. </plugins>
  36. </reporting>

5.项目信息

  • name:给用户提供更为友好的项目名
  • description:项目描述,maven文档中保存
  • url:主页的URL,maven文档中保存
  • inceptionYear:项目创建年份,4位数字。当产生版权信息时需要使用这个值
  • licenses:该元素描述了项目所有License列表。 应该只列出该项目的-
  • license列表,不要列出依赖项目的 license列表。如果列出多个license,用户可以选择它们中的一个而不是接受所有license。(如下)
  1. <license>
  2. <!--license用于法律上的名称-->
  3. <name>...</name>
  4. <!--官方的license正文页面的URL-->
  5. <url>....</url>
  6. <!--项目分发的主要方式:repo,可以从Maven库下载 manual, 用户必须手动下载和安装依赖-->
  7. <distribution>repo</distribution>
  8. <!--关于license的补充信息-->
  9. <comments>....</comments>
  10. </license>
  • organization:1.name 组织名 2.url 组织主页url
  • developers:项目开发人员列表(如下)
  • contributors:项目其他贡献者列表,同developers
  1. <developers>
  2. <!--某个开发者信息-->
  3. <developer>
  4. <!--开发者的唯一标识符-->
  5. <id>....</id>
  6. <!--开发者的全名-->
  7. <name>...</name>
  8. <!--开发者的email-->
  9. <email>...</email>
  10. <!--开发者的主页-->
  11. <url>...<url/>
  12. <!--开发者在项目中的角色-->
  13. <roles>
  14. <role>Java Dev</role>
  15. <role>Web UI</role>
  16. </roles>
  17. <!--开发者所属组织-->
  18. <organization>sun</organization>
  19. <!--开发者所属组织的URL-->
  20. <organizationUrl>...</organizationUrl>
  21. <!--开发者属性,如即时消息如何处理等-->
  22. <properties>
  23. <!-- 和主标签中的properties一样,可以随意定义子标签 -->
  24. </properties>
  25. <!--开发者所在时区, -11到12范围内的整数。-->
  26. <timezone>-5</timezone>
  27. </developer>
  28. </developers>

6.环境配置
issueManagement
目的问题管理系统(Bugzilla, Jira, Scarab)的名称和URL

  1. <issueManagement>
  2. <system>Bugzilla</system>
  3. <url>http://127.0.0.1/bugzilla/</url>
  4. </issueManagement>

ciManagement
项目的持续集成信息

  1. <ciManagement>
  2. <system>continuum</system>
  3. <url>http://127.0.0.1:8080/continuum</url>
  4. <notifiers>
  5. <notifier>
  6. <type>mail</type>
  7. <sendOnError>true</sendOnError>
  8. <sendOnFailure>true</sendOnFailure>
  9. <sendOnSuccess>false</sendOnSuccess>
  10. <sendOnWarning>false</sendOnWarning>
  11. <address>continuum@127.0.0.1</address>
  12. <configuration></configuration>
  13. </notifier>
  14. </notifiers>
  15. </ciManagement>
  • system:持续集成系统的名字
  • url:持续集成系统的URL
  • notifiers:构建完成时,需要通知的开发者/用户的配置项。包括被通知者信息和通知条件(错误,失败,成功,警告)
    type:通知方式
    sendOnError:错误时是否通知
    sendOnFailure:失败时是否通知
    sendOnSuccess:成功时是否通知
    sendOnWarning:警告时是否通知
    address:通知发送到的地址
    configuration:扩展项

mailingLists
项目相关邮件列表信息

  1. <mailingLists>
  2. <mailingList>
  3. <name>User List</name>
  4. <subscribe>user-subscribe@127.0.0.1</subscribe>
  5. <unsubscribe>user-unsubscribe@127.0.0.1</unsubscribe>
  6. <post>user@127.0.0.1</post>
  7. <archive>http://127.0.0.1/user/</archive>
  8. <otherArchives>
  9. <otherArchive>http://base.google.com/base/1/127.0.0.1</otherArchive>
  10. </otherArchives>
  11. </mailingList>
  12. .....
  13. </mailingLists>
  • subscribe, unsubscribe: 订阅邮件(取消订阅)的地址或链接,如果是邮件地址,创建文档时,mailto: 链接会被自动创建
  • archive:浏览邮件信息的URL
  • post:接收邮件的地址

scm
许你配置你的代码库,供Maven web站点和其它插件使用

  1. <scm>
  2. <connection>scm:svn:http://127.0.0.1/svn/my-project</connection>
  3. <developerConnection>scm:svn:https://127.0.0.1/svn/my-project</developerConnection>
  4. <tag>HEAD</tag>
  5. <url>http://127.0.0.1/websvn/my-project</url>
  6. </scm>
  • connection, developerConnection:这两个表示我们如何连接到maven的版本库。connection只提供读,developerConnection将提供写的请求
    写法如:scm:[provider]:[provider_specific]
    如果连接到CVS仓库,可以配置如下:-
  • scm:cvs:pserver:127.0.0.1:/cvs/root:my-project
  • tag:项目标签,默认HEAD
  • url:共有仓库路径

prerequisites
项目构建的前提

  1. <prerequisites>
  2. <maven>2.0.6</maven>
  3. </prerequisites>

repositories,pluginRepositories
依赖和扩展的远程仓库列表,同上篇文章,setting.xml配置中介绍的。

  1. <repositories>
  2. <repository>
  3. <releases>
  4. <enabled>false</enabled>
  5. <updatePolicy>always</updatePolicy>
  6. <checksumPolicy>warn</checksumPolicy>
  7. </releases>
  8. <snapshots>
  9. <enabled>true</enabled>
  10. <updatePolicy>never</updatePolicy>
  11. <checksumPolicy>fail</checksumPolicy>
  12. </snapshots>
  13. <id>codehausSnapshots</id>
  14. <name>Codehaus Snapshots</name>
  15. <url>http://snapshots.maven.codehaus.org/maven2</url>
  16. <layout>default</layout>
  17. </repository>
  18. </repositories>
  19. <pluginRepositories>
  20. ...
  21. </pluginRepositories>
  • releases, snapshots:这是各种构件的策略,release或者snapshot。这两个集合,POM就可以根据独立仓库任意类型的依赖改变策略。如:一个人可能只激活下载snapshot用来开发。
  • enable:true或者false,决定仓库是否对于各自的类型激活(release 或者 snapshot)。
  • updatePolicy: 这个元素决定更新频率。maven将比较本地pom的时间戳(存储在仓库的maven数据文件中)和远程的. 有以下选择: always, daily (默认), interval:X (x是代表分钟的整型) , never.
  • checksumPolicy:当Maven向仓库部署文件的时候,它也部署了相应的校验和文件。可选的为:ignore,fail,warn,或者不正确的校验和。
  • layout:在上面描述仓库的时候,提到他们有统一的布局。Maven 2有它仓库默认布局。然而,Maven 1.x有不同布局。使用这个元素来表明它是default还是legacy。

作者:暗剑伤人
链接:https://www.jianshu.com/p/0e3a1f9c9ce7
好文2:连接https://blog.csdn.net/qq_33363618/article/details/79438044

Maven之pom.xml配置文件详解相关推荐

  1. Maven的pom.xml文件详解------The Basics

    转载自  Maven的pom.xml文件详解------The Basics Maven坐标 GroupId.artifactId和version构成了Maven的坐标(groupId和version ...

  2. Maven的pom.xml文件详解------Environment Settings

    转载自  Maven的pom.xml文件详解------Environment Settings Issue Management 使用的缺陷跟踪系统(Bugzilla,TestTrack,Clear ...

  3. Maven的pom.xml文件详解------Build Settings

    转载自  Maven的pom.xml文件详解------Build Settings 根据POM 4.0.0 XSD,build元素概念性的划分为两个部分:BaseBuild(包含poject bui ...

  4. Maven学习—setting.xml pom.xml 配置文件详解

    一.Maven最重要的两个配置文件 Maven 仓库及相关设置配置文件 setting.xml配置文件可以设置本地仓库目录.远程仓库地址.JDK版本等等 Maven构建Java工程的pom配置文件 p ...

  5. Linux安装Maven、POM及配置文件详解

    下载Maven 下载地址 https://maven.apache.org/download.cgi 下载maven安装包 [root@oahzero]# wget https://mirrors.t ...

  6. Maven的setting.xml配置文件详解(中文)

    <?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://mav ...

  7. pom.xml配置文件详解

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/u012152619/article/d ...

  8. 二:Maven中pom.xml元素详解

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6628201.html  一个pom.xml中包含了许多标签,各个标签是对项目生命周期.依赖管理的配置.常用的主 ...

  9. Maven的settings.xml配置详解

    Maven的settings.xml配置详解 1 基本介绍 maven的两大配置文件:settings.xml和pom.xml.其中settings.xml是maven的全局配置文件,pom.xml则 ...

最新文章

  1. 如何使用Spring管理Filter和Servlet
  2. XCTF_Web_新手练习区:view_source
  3. ARC115E-LEQ and NEQ【容斥,dp,线段树】
  4. java圆形进度条_可拖拽圆形进度条组件(支持移动端)
  5. 云+X案例展 | 民生类:纷享销客助力沃得农机构筑智能化、信息化之路
  6. 哪吒:猪八戒十年DevOps演进之路
  7. python开发直播网站_开发直播网站源码的三种计算机语言
  8. android 自定义paint,Android自定义View中Paint、Rect、Canvas介绍(一)
  9. linux交叉编译jpeg,libjpeg的交叉编译以及jpeg图片的缩放(缩略图)
  10. (转)cd命令为何要实现成shell内建命令
  11. Thinpad X1 2017款制作Win10启动盘
  12. 表贴电阻尺寸与什么有关_什么是LED点光源屏?常见的LED点光源规格和型号
  13. mongodb默认的用户名密码_Linux如何安装、运行MongoDB教程
  14. linux里面rpm是什么文件,linux中deb格式和rpm格式分别是什么?
  15. ruby on rails中的分页插件Kaminari
  16. LSTM多输入时间序列预测之股价预测
  17. 自定义微博小尾巴 源码+解析
  18. Flink Back Pressure(背压)实现与监控
  19. 【科研数据处理】[实践]类别变量频数分析图表、数值变量分布图表与正态性检验(包含对数正态)
  20. 【微分方程数值解】常微分方程(一)欧拉方法和改进欧拉方法(附python算例,封装类)

热门文章

  1. 利用dpdk rte_ring实现进程间通信
  2. 2013,让你正能量无限的话
  3. 洛阳等地启动电子劳动合同试点,多家名企选择法大大
  4. 【 爬虫解决了什么问题】
  5. IDEA-Warring:Add Author to custom tags
  6. 麒麟V10系统-无法打开任务管理器
  7. NOIP2018普及组初赛题解
  8. OB数据库大赛初赛总结
  9. 2015美国大学计算机科学专业排名,2015年USNews美国大学计算机科学专业研究生排名...
  10. 一唯,ev录屏过程中断电视频的恢复,视频恢复修复