POM

Maven项目,依赖,构建配置,以及构件:所有这些都是要建模和表述的对象。这些对象通过一个名为项目对象模型(Project Object Model,POM)的XML文件描述。这个POM告诉Maven它正处理什么类型的项目,如何修改默认的行为来从源码生成输出。同样的方式,一个Java Web应用有一个web.xml文件来描述,配置,及自定义该应用,一个Maven项目则通过一个pom.xml文件定义。该文件是Maven中一个项目的描述性陈述;也是当Maven构建项目的时候需要理解的一份“地图”。

你可以将pom.xml看成是类似于Makefile或者Ant中的build.xml。当你使用GNUmake 来构建诸如MySQL软件的时候,你通常会有一个名为Makefile的文件,它包含了显式的指令来清理,编译,打包以及部署一个应用。在这一点上,Make,Ant,和Maven是相似的,它们都依赖于一个统一命名的文件如Makefilebuild.xml,或者pom.xml,但相似的地方也仅此而已。如果你看一下Maven的pom.xmlPOM的主要内容是处理描述信息:哪里存放源代码?哪里存放资源文件?打包方式是什么?如果你看一下Ant的build.xml文件,你会看到完全不同的东西。那里有显式的指令来执行一些任务,如编译一组Java类。Maven的POM是声明性的,虽然你可以通过Maven Ant插件来引入一些过程式的自定义指令,但大部分时间里,你不需要去了解项目构建的过程细节。

POM也不只是仅仅针对于构建Java项目。虽然本书的大部分样例都是Java应用,但是在Maven的项目对象模型定义中没有任何Java特定的东西。虽然Maven的默认插件是从一组源码,测试,和资源来构建一个JAR文件。但你同样可以为一个包含C#源码,使用微软工具处理一些微软私有的二进制文件的项目来定义一个POM。类似的,你也可以为一本技术书籍定义一个POM。事实上,本书的源码和本书的样例正是用一个Maven多模块项目组织的,我们使用一个Maven Docbook插件,将标准的Docbook XSL应用到一系列章节的XML文件上。还有人编写了Maven插件来将Adobe Flex代码构建成SWCSWF,也还有人使用了Maven来构建C编写的项目。

我们已经确定了POM是描述性和声明性的,它不像Ant或者Make那样提供显式的指令,我们也注意到POM的概念不是特定于Java的。让我们深入更多的细节,看一下Figure 9.1, “项目对象模型”,纵览一下POM的内容。

Figure 9.1. 项目对象模型

POM包含了四类描述和配置:

项目总体信息

它包含了一个项目的而名称,项目的URL,发起组织,以及项目的开发者贡献者列表和许可证。

构建设置

在这一部分,我们自定义Maven构建的默认行为。我们可以更改源码和测试代码的位置,可以添加新的插件,可以将插件目标绑定到生命周期,我们还可以自定义站点生成参数。

构建环境

构建环境包含了一些能在不同使用环境中激活的profile。例如,在开发过程中你可能会想要将应用部署到一个而开发服务器上,而在产品环境中你会需要将应用部署到产品服务器上。构建环境为特定的环境定制了构建设置,通常它还会由~/.m2中的自定义settings.xml补充。这个settings文件将会在Chapter 11,构建Profile中,以及Section A.1, “简介”中的Appendix A,附录: Settings细节小节中讨论。

POM关系

一个项目很少孤立存在;它会依赖于其它项目,可能从父项目继承POM设置,它要定义自身的坐标,可能还会包含子模块。

在深入钻研一些样例POM之前,让我们先快速看一下超级POM。所有的Maven项目的POM都扩展自超级POM。超级POM定义了一组被所有项目共享的默认设置。它是Maven安装的一部分,可以在/usr/local/maven/lib中的maven-2.0.9-uber.jar文件中找到。如果你看一下这个JAR文件,你会看到在包org.apache.maven.project下看到一个名为pom-4.0.0.xml的文件。这个Maven的超级POMExample 9.1, “超级POM”所示。

Example 9.1. 超级POM

<span style="color: rgb(0, 128, 0);"><span style="font-size: 16px;"></span></span><span style="color: rgb(0, 128, 0);"><span style="font-size: 16px;"><<span class="hl-tag" style="color: blue;">project</span>
><<span class="hl-tag" style="color: blue;">modelVersion</span>
>4.0.0<<span class="hl-tag" style="color: blue;">/modelVersion</span>
><<span class="hl-tag" style="color: blue;">name</span>
>Maven Default Project<<span class="hl-tag" style="color: blue;">/name</span>
><<span class="hl-tag" style="color: blue;">repositories</span>
><<span class="hl-tag" style="color: blue;">repository</span>
><<span class="hl-tag" style="color: blue;">id</span>
>central<<span class="hl-tag" style="color: blue;">/id</span>
> <<span class="hl-tag" style="color: blue;">name</span>
>Maven Repository Switchboard<<span class="hl-tag" style="color: blue;">/name</span>
><<span class="hl-tag" style="color: blue;">layout</span>
>default<<span class="hl-tag" style="color: blue;">/layout</span>
><<span class="hl-tag" style="color: blue;">url</span>
>http://repo1.maven.org/maven2<<span class="hl-tag" style="color: blue;">/url</span>
><<span class="hl-tag" style="color: blue;">snapshots</span>
><<span class="hl-tag" style="color: blue;">enabled</span>
>false<<span class="hl-tag" style="color: blue;">/enabled</span>
><<span class="hl-tag" style="color: blue;">/snapshots</span>
><<span class="hl-tag" style="color: blue;">/repository</span>
><<span class="hl-tag" style="color: blue;">/repositories</span>
><<span class="hl-tag" style="color: blue;">pluginRepositories</span>
><<span class="hl-tag" style="color: blue;">pluginRepository</span>
><<span class="hl-tag" style="color: blue;">id</span>
>central<<span class="hl-tag" style="color: blue;">/id</span>
> <<span class="hl-tag" style="color: blue;">name</span>
>Maven Plugin Repository<<span class="hl-tag" style="color: blue;">/name</span>
><<span class="hl-tag" style="color: blue;">url</span>
>http://repo1.maven.org/maven2<<span class="hl-tag" style="color: blue;">/url</span>
><<span class="hl-tag" style="color: blue;">layout</span>
>default<<span class="hl-tag" style="color: blue;">/layout</span>
><<span class="hl-tag" style="color: blue;">snapshots</span>
><<span class="hl-tag" style="color: blue;">enabled</span>
>false<<span class="hl-tag" style="color: blue;">/enabled</span>
><<span class="hl-tag" style="color: blue;">/snapshots</span>
><<span class="hl-tag" style="color: blue;">releases</span>
><<span class="hl-tag" style="color: blue;">updatePolicy</span>
>never<<span class="hl-tag" style="color: blue;">/updatePolicy</span>
><<span class="hl-tag" style="color: blue;">/releases</span>
><<span class="hl-tag" style="color: blue;">/pluginRepository</span>
><<span class="hl-tag" style="color: blue;">/pluginRepositories</span>
><<span class="hl-tag" style="color: blue;">build</span>
> <<span class="hl-tag" style="color: blue;">directory</span>
>target<<span class="hl-tag" style="color: blue;">/directory</span>
><<span class="hl-tag" style="color: blue;">outputDirectory</span>
>target/classes<<span class="hl-tag" style="color: blue;">/outputDirectory</span>
><<span class="hl-tag" style="color: blue;">finalName</span>
>content-zh-0.6-SNAPSHOT<<span class="hl-tag" style="color: blue;">/finalName</span>
><<span class="hl-tag" style="color: blue;">testOutputDirectory</span>
>target/test-classes<<span class="hl-tag" style="color: blue;">/testOutputDirectory</span>
><<span class="hl-tag" style="color: blue;">sourceDirectory</span>
>src/main/java<<span class="hl-tag" style="color: blue;">/sourceDirectory</span>
><<span class="hl-tag" style="color: blue;">scriptSourceDirectory</span>
>src/main/scripts<<span class="hl-tag" style="color: blue;">/scriptSourceDirectory</span>
><<span class="hl-tag" style="color: blue;">testSourceDirectory</span>
>src/test/java<<span class="hl-tag" style="color: blue;">/testSourceDirectory</span>
><<span class="hl-tag" style="color: blue;">resources</span>
><<span class="hl-tag" style="color: blue;">resource</span>
><<span class="hl-tag" style="color: blue;">directory</span>
>src/main/resources<<span class="hl-tag" style="color: blue;">/directory</span>
><<span class="hl-tag" style="color: blue;">/resource</span>
><<span class="hl-tag" style="color: blue;">/resources</span>
><<span class="hl-tag" style="color: blue;">testResources</span>
><<span class="hl-tag" style="color: blue;">testResource</span>
><<span class="hl-tag" style="color: blue;">directory</span>
>src/test/resources<<span class="hl-tag" style="color: blue;">/directory</span>
><<span class="hl-tag" style="color: blue;">/testResource</span>
><<span class="hl-tag" style="color: blue;">/testResources</span>
><<span class="hl-tag" style="color: blue;">/build</span>
><<span class="hl-tag" style="color: blue;">pluginManagement</span>
><<span class="hl-tag" style="color: blue;">plugins</span>
><<span class="hl-tag" style="color: blue;">plugin</span>
><<span class="hl-tag" style="color: blue;">artifactId</span>
>maven-antrun-plugin<<span class="hl-tag" style="color: blue;">/artifactId</span>
><<span class="hl-tag" style="color: blue;">version</span>
>1.1<<span class="hl-tag" style="color: blue;">/version</span>
><<span class="hl-tag" style="color: blue;">/plugin</span>
>       <<span class="hl-tag" style="color: blue;">plugin</span>
><<span class="hl-tag" style="color: blue;">artifactId</span>
>maven-assembly-plugin<<span class="hl-tag" style="color: blue;">/artifactId</span>
><<span class="hl-tag" style="color: blue;">version</span>
>2.2-beta-1<<span class="hl-tag" style="color: blue;">/version</span>
><<span class="hl-tag" style="color: blue;">/plugin</span>
><<span class="hl-tag" style="color: blue;">plugin</span>
><<span class="hl-tag" style="color: blue;">artifactId</span>
>maven-clean-plugin<<span class="hl-tag" style="color: blue;">/artifactId</span>
><<span class="hl-tag" style="color: blue;">version</span>
>2.2<<span class="hl-tag" style="color: blue;">/version</span>
><<span class="hl-tag" style="color: blue;">/plugin</span>
><<span class="hl-tag" style="color: blue;">plugin</span>
><<span class="hl-tag" style="color: blue;">artifactId</span>
>maven-compiler-plugin<<span class="hl-tag" style="color: blue;">/artifactId</span>
><<span class="hl-tag" style="color: blue;">version</span>
>2.0.2<<span class="hl-tag" style="color: blue;">/version</span>
><<span class="hl-tag" style="color: blue;">/plugin</span>
><<span class="hl-tag" style="color: blue;">plugin</span>
><<span class="hl-tag" style="color: blue;">artifactId</span>
>maven-dependency-plugin<<span class="hl-tag" style="color: blue;">/artifactId</span>
><<span class="hl-tag" style="color: blue;">version</span>
>2.0<<span class="hl-tag" style="color: blue;">/version</span>
><<span class="hl-tag" style="color: blue;">/plugin</span>
><<span class="hl-tag" style="color: blue;">plugin</span>
><<span class="hl-tag" style="color: blue;">artifactId</span>
>maven-deploy-plugin<<span class="hl-tag" style="color: blue;">/artifactId</span>
><<span class="hl-tag" style="color: blue;">version</span>
>2.3<<span class="hl-tag" style="color: blue;">/version</span>
><<span class="hl-tag" style="color: blue;">/plugin</span>
><<span class="hl-tag" style="color: blue;">plugin</span>
><<span class="hl-tag" style="color: blue;">artifactId</span>
>maven-ear-plugin<<span class="hl-tag" style="color: blue;">/artifactId</span>
><<span class="hl-tag" style="color: blue;">version</span>
>2.3.1<<span class="hl-tag" style="color: blue;">/version</span>
><<span class="hl-tag" style="color: blue;">/plugin</span>
><<span class="hl-tag" style="color: blue;">plugin</span>
><<span class="hl-tag" style="color: blue;">artifactId</span>
>maven-ejb-plugin<<span class="hl-tag" style="color: blue;">/artifactId</span>
><<span class="hl-tag" style="color: blue;">version</span>
>2.1<<span class="hl-tag" style="color: blue;">/version</span>
><<span class="hl-tag" style="color: blue;">/plugin</span>
><<span class="hl-tag" style="color: blue;">plugin</span>
><<span class="hl-tag" style="color: blue;">artifactId</span>
>maven-install-plugin<<span class="hl-tag" style="color: blue;">/artifactId</span>
><<span class="hl-tag" style="color: blue;">version</span>
>2.2<<span class="hl-tag" style="color: blue;">/version</span>
><<span class="hl-tag" style="color: blue;">/plugin</span>
><<span class="hl-tag" style="color: blue;">plugin</span>
><<span class="hl-tag" style="color: blue;">artifactId</span>
>maven-jar-plugin<<span class="hl-tag" style="color: blue;">/artifactId</span>
><<span class="hl-tag" style="color: blue;">version</span>
>2.2<<span class="hl-tag" style="color: blue;">/version</span>
><<span class="hl-tag" style="color: blue;">/plugin</span>
><<span class="hl-tag" style="color: blue;">plugin</span>
><<span class="hl-tag" style="color: blue;">artifactId</span>
>maven-javadoc-plugin<<span class="hl-tag" style="color: blue;">/artifactId</span>
><<span class="hl-tag" style="color: blue;">version</span>
>2.4<<span class="hl-tag" style="color: blue;">/version</span>
><<span class="hl-tag" style="color: blue;">/plugin</span>
><<span class="hl-tag" style="color: blue;">plugin</span>
><<span class="hl-tag" style="color: blue;">artifactId</span>
>maven-plugin-plugin<<span class="hl-tag" style="color: blue;">/artifactId</span>
><<span class="hl-tag" style="color: blue;">version</span>
>2.3<<span class="hl-tag" style="color: blue;">/version</span>
><<span class="hl-tag" style="color: blue;">/plugin</span>
><<span class="hl-tag" style="color: blue;">plugin</span>
><<span class="hl-tag" style="color: blue;">artifactId</span>
>maven-rar-plugin<<span class="hl-tag" style="color: blue;">/artifactId</span>
><<span class="hl-tag" style="color: blue;">version</span>
>2.2<<span class="hl-tag" style="color: blue;">/version</span>
><<span class="hl-tag" style="color: blue;">/plugin</span>
><<span class="hl-tag" style="color: blue;">plugin</span>
>                <<span class="hl-tag" style="color: blue;">artifactId</span>
>maven-release-plugin<<span class="hl-tag" style="color: blue;">/artifactId</span>
><<span class="hl-tag" style="color: blue;">version</span>
>2.0-beta-7<<span class="hl-tag" style="color: blue;">/version</span>
><<span class="hl-tag" style="color: blue;">/plugin</span>
><<span class="hl-tag" style="color: blue;">plugin</span>
>                <<span class="hl-tag" style="color: blue;">artifactId</span>
>maven-resources-plugin<<span class="hl-tag" style="color: blue;">/artifactId</span>
><<span class="hl-tag" style="color: blue;">version</span>
>2.2<<span class="hl-tag" style="color: blue;">/version</span>
><<span class="hl-tag" style="color: blue;">/plugin</span>
><<span class="hl-tag" style="color: blue;">plugin</span>
><<span class="hl-tag" style="color: blue;">artifactId</span>
>maven-site-plugin<<span class="hl-tag" style="color: blue;">/artifactId</span>
><<span class="hl-tag" style="color: blue;">version</span>
>2.0-beta-6<<span class="hl-tag" style="color: blue;">/version</span>
><<span class="hl-tag" style="color: blue;">/plugin</span>
><<span class="hl-tag" style="color: blue;">plugin</span>
><<span class="hl-tag" style="color: blue;">artifactId</span>
>maven-source-plugin<<span class="hl-tag" style="color: blue;">/artifactId</span>
><<span class="hl-tag" style="color: blue;">version</span>
>2.0.4<<span class="hl-tag" style="color: blue;">/version</span>
><<span class="hl-tag" style="color: blue;">/plugin</span>
>         <<span class="hl-tag" style="color: blue;">plugin</span>
><<span class="hl-tag" style="color: blue;">artifactId</span>
>maven-surefire-plugin<<span class="hl-tag" style="color: blue;">/artifactId</span>
><<span class="hl-tag" style="color: blue;">version</span>
>2.4.2<<span class="hl-tag" style="color: blue;">/version</span>
><<span class="hl-tag" style="color: blue;">/plugin</span>
><<span class="hl-tag" style="color: blue;">plugin</span>
><<span class="hl-tag" style="color: blue;">artifactId</span>
>maven-war-plugin<<span class="hl-tag" style="color: blue;">/artifactId</span>
><<span class="hl-tag" style="color: blue;">version</span>
>2.1-alpha-1<<span class="hl-tag" style="color: blue;">/version</span>
><<span class="hl-tag" style="color: blue;">/plugin</span>
><<span class="hl-tag" style="color: blue;">/plugins</span>
><<span class="hl-tag" style="color: blue;">/pluginManagement</span>
><<span class="hl-tag" style="color: blue;">reporting</span>
><<span class="hl-tag" style="color: blue;">outputDirectory</span>
>target/site<<span class="hl-tag" style="color: blue;">/outputDirectory</span>
><<span class="hl-tag" style="color: blue;">/reporting</span>
><<span class="hl-tag" style="color: blue;">/project</span>
></span></span>

这个超级POM定义了一些由所有项目继承的标准配置变量。对这些变量的简单解释如下:

默认的超级POM定义了一个单独的远程Maven仓库,ID为central。这是所有Maven客户端默认配置访问的中央Maven仓库。该配置可以通过一个自定义的settings.xml文件来覆盖。注意这个默认的超级POM关闭了从中央Maven仓库下载snapshot构件的功能。如果你需要使用一个snapshot仓库,你就要在你的pom.xml或者settings.xml中自定义仓库设置。Settings和profile将会在Chapter 11,构建Profile中和Section A.1, “简介”中的Appendix A,附录: Settings细节小节中具体介绍。

中央Maven仓库同时也包含Maven插件。默认的插件仓库就是这个中央仓库。Snapshot被关闭了,而且更新策略被设置成了“从不”,这意味着Maven将永远不会自动更新一个插件,即使新版本的插件发布了。

build元素设置Maven标准目录布局中那些目录的默认值。

从Maven 2.0.9开始,超级POM为核心插件提供了默认版本。这么做是为那些没有在它们POM中指定插件版本的用户提供一些稳定性。

Figure 9.2. 超级POM永远是最基础的父POM

pom.xml之 超级POM相关推荐

  1. maven pom.xml解析、命令说明、依赖传递、继承、聚合、properties、build、依赖范围、版本仲裁、profile

    maven是当前Java项目中用到最多的依赖管理工具.最开始的项目比较小引入的依赖包也少所以可以通过手动加载jar包的方式来管理依赖包:但随着项目越来越复杂各种大小框架层出不穷,一个项目的开发往往依赖 ...

  2. 超级 POM,POM的层级关系

    超级 POM 经过我们前面的学习,我们看到 Maven 在构建过程中有很多默认的设定.例如:源文件存放的目录.测试源文件存放的目录.构建输出的目录--等等.但是其实这些要素也都是被 Maven 定义过 ...

  3. maven 配置篇 之pom.xml

    http://zyl.iteye.com/blog/41754 说完了settings.xml配置,下来说一下maven2的主要配置pom.xml 什么是pom?     pom作为项目对象模型.通过 ...

  4. Maven3版本的超级POM位置及中央仓库位置

    背景 之所以想到这个问题,是因为在配置Nexus-Maven 私服的时候,需要在Maven的settings.xml中对<mirror>进行配置,在配置中央仓库的镜像时,<mirro ...

  5. maven配置篇之pom.xml

    maven 配置篇 之pom.xml 说完了settings.xml配置,下来说一下maven2的主要配置pom.xml 什么是pom?     pom作为项目对象模型.通过xml表示maven项目, ...

  6. Maven配置之pom.xml(一)

    说完了settings.xml配置,下来说一下maven2的主要配置pom.xml 什么是pom?     pom作为项目对象模型.通过xml表示maven项目,使用pom.xml来实现.主要描述了项 ...

  7. [Eclipse手册]设置pom.xml打开方式

    转载:https://blog.csdn.net/why15732625998/article/details/74370266 1.打开Window>Preferences>Maven& ...

  8. eclipse 打开pom.xml文件很慢 设置pom.xml打开方式

    1.打开Window>Preferences>Maven>User Interface勾选"open XML page in the POM editor by defau ...

  9. (转)eclipse 打开pom.xml文件很慢 设置pom.xml打开方式

    http://blog.csdn.net/wobendiankun/article/details/24832119 1.打开Window>Preferences>Maven>Use ...

最新文章

  1. 【全网最精简写法】ES6获取浏览器url跟参
  2. python 给字典排序
  3. 【计算机网络】数据链路层 : 差错控制 ( 检错编码 | 差错来源 | 差错分类 | 冗余编码 )
  4. u-boot命令寻找分析--find_cmd函数
  5. 最短网络 Agri-Net
  6. C++11右值引用和移动构造函数
  7. 在无IIS下用SharpDevelop进行Asp.net 开发
  8. C++中const关键字的使用总结
  9. [.NET领域驱动设计实战系列]专题二:结合领域驱动设计的面向服务架构来搭建网上书店...
  10. 大白菜ZSKAME下载 2013官方地址
  11. 栈——括号匹配(洛谷 Uva673)
  12. SQL Server中的部分存储过程
  13. Android 广播学习笔记
  14. Windows给SVN配置中文语言包
  15. c oracle 参数赋值,利用c#反射实现实体类生成以及数据获取与赋值
  16. iOS不能显示英文音标问题
  17. 安卓屏幕朗读app_8个非常好用的黑科技App
  18. dtcms分页含多个参数,多个参数分页
  19. 输入正整数后逆置输出
  20. Fdma, TDMA,cdma

热门文章

  1. Visial Studio 萌新 错误列表 之 “变量已被优化掉 因而不可用“
  2. 2022-07-21第八组wly Java面向对象(4)---继承
  3. 最讨厌的下属就是他不把领导放在眼里
  4. vue: solt内容分发 动态组件
  5. 2019年第十六届中国研究生数学建模竞赛F题·一种快速找到最优解的算法(提供Matlab源码)
  6. 网卡速率、带宽、上行、下行、之间关系
  7. DDoS 攻击与防御:从原理到实践(下)
  8. 小米note 3 Android8.1一键刷机,刷机教程
  9. UE4(虚幻4)学习-初学者内容包-编辑界面讲解
  10. UESTC 758:P酱的冒险旅途【水】