Maven的POM.xml详解(一)

原文:http://maven.apache.org/pom.html

POM是什么?

POM是“Project ObjectModel”的首字母缩写,即工程对象模型。它在一个名叫pom.xml的文件中使用XML来表示一个Maven工程。在跟使用Maven的人们一起谈论工程时,工程的概念有些哲学的意义,它不仅仅是一个包含代码的文件的集合。一个工程包含了配置文件、相关的开发者和他们的角色、缺陷跟踪系统、组织机构和授权许可、工程的URL、工程依赖、以及所有的其他的对代码发挥作用的微笑片段。它包含相关项目的所有信息。实际上,在Maven的世界里,一个工程可以只是一个pom.xml文件,而不需要包含任何代码。

概要

这是一份POM的<project>元素之下的元素清单,要注意<modelVersion>元素包含了4.0.0。这是当前Maven2和3所支持的唯一POM版本,并且它是必须的。

<projectxmlns="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>

<artifactId>...</artifactId>

<version>...</version>

<packaging>...</packaging>

<dependencies>...</dependencies>

<parent>...</parent>

<dependencyManagement>...</dependencyManagement>

<modules>...</modules>

<properties>...</properties>

<!—编译设置 -->

<build>...</build>

<reporting>...</reporting>

<!—更多的工程信息 -->

<name>...</name>

<description>...</description>

<url>...</url>

<inceptionYear>...</inceptionYear>

<licenses>...</licenses>

<organization>...</organization>

<developers>...</developers>

<contributors>...</contributors>

<!—环境设置 -->

<issueManagement>...</issueManagement>

<ciManagement>...</ciManagement>

<mailingLists>...</mailingLists>

<scm>...</scm>

<prerequisites>...</prerequisites>

<repositories>...</repositories>

<pluginRepositories>...</pluginRepositories>

<distributionManagement>...</distributionManagement>

<profiles>...</profiles>

</project>

基础部分

POM包含一个工程所需要的所有的信息,以及在编译过程中所使用的插件的配置信息。它是一份有效的“是谁(who)”、“在那儿(where)”、“做了什么(what)”的声明,同时也“在什么时候”、“怎样做”的编译生命周期。这不是说POM不能影响到编译生命周的流程---它是可以的。例如,通过配置<maven-antrun-plugin>元素,就可以有效的把一个ant任务嵌入到POM内部。但是它是最后的声明。跟build.xml准确的告诉ant什么时候运行,做什么事情一样,POM也会写明这些配置(声明)。如果由于一些外部原因导致生命周期跳过ant插件的执行,它不会终止插件的执行过程,这一点跟ant的build.xml不一样,build.xml中的任务几乎总是线性执行的。

<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>org.codehaus.mojo</groupId>
  <artifactId>my-project</artifactId>
  <version>1.0</version>
</project>

Maven的坐标

上面定义了一个Maven2和3所允许的最小的POM。groupId、artifactId、version是必须的字段(尽管groupId和version不需要显示的定义,因为它们可以继承父辈的这两字段,关于继承后续会更详细的介绍)。这三个字段就像一个地址和时间戳,它在一个资源库中标记了一个特定的位置,就像一个坐标系统。

groupId:通常在组织或工程之中,这个值是唯一的。例如核心的Maven部件都放在groupId是org.apache.maven的下面。这个ID值不一定使用圆点符号来分割,例如,Junit工程。注意,使用圆点符号的groupId不必与工程中所包含的包的结构一致,但是保持一致是一钟好的习惯。当把工程保存到一个存储库中的时候,这个groupId就像操作系统中的Java包的结构一样,圆点会被操作系统的目录分割符(如Unix中的’/’)所替代,这样它就会成为相对于基础库的目录结构,如上文给出的例子中,org.codehaus.mojo组位于目录$M2_REPO/org/codehaus/mojo中。

artifactId:通常artifactId就是该工程的名字,尽管groupId是重要的,但是人们在讨论中很少会提及它(它们经常都是相同的,例如Codehaus Mojo工程的groupId都是org.codehaus.mojo)。artifactId跟在groupId的后面,它跟groupId一起创建了一个把本工程与世界上其他工程分离的唯一的键。groupId和artifactId一起定义了该部件在存储库中的位置。在上面的例子中,my-project位于$M2-REPO/org/codehaus/mojo/my-project中。

version:这是pom.xml命名中最后一部分,groupId:artifactId代表了一个独立的工程,但它们不能描述工程自身的变化。我想一下今天的junit:junit(版本4)跟四年前的版本(版本2)会一样吗?简而言之,代码发生了改变,这些改变是用版本来区分的,并且它会保持线性的增长。在一个部件库中,它会使用版本来进行彼此的区分。my-project的版本1.0的文件会位于目录结构$M2-REPO/org/codehaus/mojo/my-project/1.0中。

以上3个元素指明了一个工程的版本,这样Mave就会知道我们正在处理的工程,以及它们所处的生命周期。

packaging:在给出了groupId:artifactId:version的地址结构后,我们就有了一个真实完整的标准的地址标签。packaging则指定了工程部件的类型。在上述示例中,POM给org.codehaus.mojo:my-project:1.0定义了程序包的类型为jar。我们也可以通过声明不同的packaging让它打包成war文件:

<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">
  ...
  <packaging>war</packaging>
  ...
</project>

当没有声明packaging时,Maven会假设默认的部件类型是jar。有效的类型是org.apache.maven.lifecycle.mapping.LifecycleMapping组件的Plexus的任务提示。当前核心的packaging值包括:pom、jar、maven-plugin、ejb、war、ear、rar、par。它们用详细的包的结构定义了每个对应的编译动作所要执行的默认的目标列表。

有些时候我们会看到Maven打印出的工程坐标:groupId:artifactId:packaging:version。

classifier:你偶尔会在Maven坐标中看到第五个元素:classifier。稍后我们会介绍它,它会作为工程的类型来显示:groupId:artifactId:packaging:classifier:version。

时间: 01-18

Maven的POM.xml详解(一)的相关文章

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

一.引言 (本文转载自:http://blog.csdn.net/longeremmy/article/details/9670619) 使用maven有一些时间了,一直没有好好将pom配置文件每个节点的意义好好了解一番.今天突然想来了解下:pom- project object model 项目对象模型.顾名思义,他是用来描述项目信息的,以及构建方式,依赖等.网上有一篇文章写的很详细,这里就借用一下,以备日后使用. 二.详解 1 <project xmlns="http://maven.

Maven的POM.xml详解(二)

本文译自:http://maven.apache.org/pom.html POM关系 Maven的强大之一就是它的工程关系的处理能力,它包括依赖(和依赖传递).继承和聚集(多模块的工程).传统的依赖管理让即使是最简单的工程也会变得异常复杂."Jarmageddon"虽然快速,但会让依赖树变得大而复杂."JarHell"在一个系统上所依赖的版本并不等同于那些被开发的版本,它既有可能给出错误的版本,也有可能在相似命名的Jar包之间发生冲突.Maven通过一个共同的本地

maven核心,pom.xml详解

什么是pom? pom作为项目对象模型.通过xml表示maven项目,使用pom.xml来实现.主要描述了项目:包括配置文件:开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的url,项目的依赖性,以及其他所有的项目相关因素. 快速察看: <project> <modelVersion>4.0.0</modelVersion> <!--maven2.0必须是这样写,现在是maven2唯一支持的版本--> <!-- 基础设置 -->

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

<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.0http://maven.apache.org/maven-v4_0_0.xsd"> <!--父项目的坐标.如果项目

Maven.pom.xml详解

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.0http://maven.apache.org/maven-v4_0_0.xsd"> 4 <!--父项目

maven基本组建pom.xml详解

Maven的依赖是使用Maven坐标来定位的,而Maven坐标主要由GAV(groupId, artifactId, version)构成.因此,使用任何一个依赖之间,你都需要知道它的Maven坐标. http://www.mvnrepository.com 在这里可以找到很多的依赖坐标. 1.依赖 <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</

pom.xml详解

一,基本配置 1. maven的协作相关属性 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.a

史上最全的maven的pom.xml文件详解

史上最全的maven的pom.xml文件详解 http://www.cnblogs.com/hafiz/p/5360195.html <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

POM文件详解(1)

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/maven-v4_0_0.xsd "> 1      Parent坐标 <