The POM-Java-优质IT资源分享社区

admin
管理员
管理员
  • UID1
  • 粉丝30
  • 关注4
  • 发帖数581
  • 社区居民
  • 忠实会员
  • 原创写手
阅读:278回复:0

 The POM

楼主#
更多 发布于:2016-05-20 18:54

《Maven官方文档》POM文件

原文网址:The POM

啥是POM?

POM(project object

model)包含了工程信息和工程的装备细节,Maven运用POM文件来构建工程。POM文件包含了工程中的大多数默许值。举个比方,target是默许的构建目录,src/main/java是默许的源码目录,src/test/java是默许的测试源码目录,等等。

Maven2中的pom.xml即是Maven1中的project.xml。比较于在maven.xml中包含可履行的goal,如今goals和plugins都能够在pom.xml中装备。当履行一个task或许goal时,Maven会在当时目录下寻觅并读取pom.xml来获取装备信息,然后履行goal。

能在pom.xml中声明的装备包含工程依靠(project

dependencies),插件(plugins),可履行的方针(goals),构建装备(build

profiles)等等。其他信息,比方工程版别,描绘,开发者,邮件列表等等也能够在pox.xml中声明。

Super POM

Super POM是Maven的默许POM文件,除非你显现的声明承继联系,不然一切的POM文件都是在Super

POM的基础上的拓展,也即是说,Super POM中的的装备会被你的工程中创立的pom.xml承继。Maven 2.0.x中的Super

POM代码如下:

4.0.0

Maven Default Project

central

Maven Repository Switchboard

default

http://repo1.maven.org/maven2

false

central

Maven Plugin Repository

http://repo1.maven.org/maven2

default

false

never

target

target/classes

${artifactId}-${version}

target/test-classes

src/main/java

src/main/scripts

src/test/java

src/main/resources

src/test/resources

target/site

release-profile

performRelease

true

org.apache.maven.plugins

maven-source-plugin

attach-sources

jar

true

org.apache.maven.plugins

maven-javadoc-plugin

attach-javadocs

jar

true

org.apache.maven.plugins

maven-deploy-plugin

true

下面是Maven 2.1.x的Super POM:

4.0.0

Maven Default Project

central

Maven Repository Switchboard

default

http://repo1.maven.org/maven2

false

central

Maven Plugin Repository

http://repo1.maven.org/maven2

default

false

never

${project.basedir}/target

${project.build.directory}/classes

${project.artifactId}-${project.version}

${project.build.directory}/test-classes

${project.basedir}/src/main/java

src/main/scripts

${project.basedir}/src/test/java

${project.basedir}/src/main/resources

${project.basedir}/src/test/resources

maven-antrun-plugin

1.3

maven-assembly-plugin

2.2-beta-2

maven-clean-plugin

2.2

maven-compiler-plugin

2.0.2

maven-dependency-plugin

2.0

maven-deploy-plugin

2.4

maven-ear-plugin

2.3.1

maven-ejb-plugin

2.1

maven-install-plugin

2.2

maven-jar-plugin

2.2

maven-javadoc-plugin

2.5

maven-plugin-plugin

2.4.3

maven-rar-plugin

2.2

maven-release-plugin

2.0-beta-8

maven-resources-plugin

2.3

maven-site-plugin

2.0-beta-7

maven-source-plugin

2.0.4

maven-surefire-plugin

2.4.3

maven-war-plugin

2.1-alpha-2

${project.build.directory}/site

release-profile

performRelease

true

true

org.apache.maven.plugins

maven-source-plugin

attach-sources

jar

true

org.apache.maven.plugins

maven-javadoc-plugin

attach-javadocs

jar

true

org.apache.maven.plugins

maven-deploy-plugin

true

最小化POM

一个最小化的POM文件的请求如下:

project 标签作为顶层标签

modelVersion – 应该设为4.0.0

groupId – 工程开发组的唯一id

artifactId – 工件(artifact)或工程(projrct)的唯一id

version – 版别号

这里是一个最小化POM的比方:

4.0.0

com.mycompany.app

my-app

1

在POM文件中需求声明 groupId , artifactId 和 version

。这三个值以::的方法声明,它们组成了工程的完好称号。比方上面的比方,完好称号为”com.mycompany.app:my-app1″。

如第一节所说,假如装备细节没有显现的设置,Maven将会运用承继自Super POM默许装备。其间一个默许值即是包的类型(packaging

type),每个Maven工程都有一个包类型,假如没有在POM中设置,则默许为”jar”。

前面的Minimal POM中,其间 repositories 这个值没有设置,假如你运用minimal POM来构建你的工程,它将运用承继Super

POM中的 repositories

值(http://repo.maven.apache.org/maven2),当Maven在POM中找到依靠,它就会去这个地址下载依靠包。

工程承继

POM中可装备的元素如下:

依靠 (dependencies)

开发者和贡献者 (developers and contributors)

插件列表,包含报告 (plugin lists, including reports)

相应id的插件履行 (plugin executions with matching ids)

插件装备 (plugin configuration)

资本 (resources)

Super POM即是一个工程承继的比方。你也能够经过在POM中指定parent element来引进你自个的POM作为基础。就像下面的比方:

Example 1

情形

在这个比方中,咱们仍是沿袭com.mycompany.app:my-app:1这个称号。如今让咱们引进另一个工件,com.mycompany.app:my-module:1.

4.0.0

com.mycompany.app

my-module

1

指定它们的目录构造如下:

.

|-- my-module

| `-- pom.xml

`-- pom.xml

留意: my-module/pom.xml 是com.mycompany.app:my-module:1 的POM文件,而 pom.xml

是com.mycompany.app:my-app:1的POM文件。

解决方案

如今,假如咱们将com.mycompany.app:my-app:1指定为com.mycompany.app:my-module:1的父工件(parent

artifact),咱们需求批改com.mycompany.app:my-module:1的POM文件如下:

com.mycompany.app

my-app

1

4.0.0

com.mycompany.app

my-module

1

留意,咱们需求增加一个parent结点,这个结点答应咱们指定当时POM的父POM。经过指定父POM的完好称号(即groupId,artifactId,version这三个标签),咱们的模块(module)就能够承继父POM中的特点了。

别的,假如咱们希望groupId和模块的version和他们的parents一样,你能够移除当时模块POM中的groupId和version标签。

com.mycompany.app

my-app

1

4.0.0

my-module

这么做能够让当时模块集成父POM的groupid和version。

Example 2

情形

在父工程现已装置在本地库房或指定目录构造(父POM是模块POM的上一级目录)中时,这么做是能够得。

可是假如父工程没有装置或许是像这么的目录组织呢?

.

|-- my-module

| `-- pom.xml

`-- parent

`-- pom.xml

解决方案

为了批改这个目录构造,咱们将在parent结点中增加元素。

com.mycompany.app

my-app

1

../parent/pom.xml

4.0.0

my-module

顾名思义,这个元素指定了从模块POM到其父POM的相对路径。

工程聚合

工程聚合和工程承继很类似,但不是从子模块指定父POM,而是从父POM指定子模块。这么做的话,父工程就知道子模块的存在了,而且假如Maven指令从父工程调用,在子模块中也能顺畅履行。工程聚合请求如下做法:

将父POM的packageing特点设为”pom”

在父POM中指定模块的目录(子POM)

Example 3

情形

仍是前次的POM和目录构造

com.mycompany.app:my-app:1’s POM

4.0.0

com.mycompany.app

my-app

1

com.mycompany.app:my-module:1’s POM

4.0.0

com.mycompany.app

my-module

1

directory structure

.

|-- my-module

| `-- pom.xml

`-- pom.xml

解决方案

假如咱们预备将my-module聚合进my-app中,咱们只需求批改my-app。

4.0.0

com.mycompany.app

my-app

1

pom

my-module

在批改后的POM中,增加了packaging有些和模块有些,packaging的值设为”pom”,模块有些增加了my-module。的值是com.mycompany.app:my-app:1到com.mycompany.app:my-module:1的POM的相对路径(操练中,咱们用模块的artifactId作为目录称号)。

如今,当Maven指令在com.mycompany.app:my-app:1中履行时,一样的明明也会在com.mycompany.app:my-module:1中履行。此外,有些指令(goals

soecifically)以不一样的方法处理工程聚合的状况。

Example 4

情形

假如咱们将目录构造改成这么

.

|-- my-module

| `-- pom.xml

`-- parent

`-- pom.xml

父POM又该怎么指定子模块呢?

解决方案

答案是 – 跟Example 3一样,指定路径就好了。

4.0.0

com.mycompany.app

my-app

1

pom

../my-module

工程承继与工程聚合

假如你有好几个Maven

工程,而且这些工程有着类似的装备,你能够经过将一样的装备放到一个父工程中来重构。这么的话,你所要做的即是让你的Maven工程承继这个父工程,这些装备就能在一切的工程中通用了。

假如你有一组工程一同构建和运转,你能够创立一个父工程,并在父工程中声明这些工程为它的模块,这么做,你只需构建父工程,子工程也会随之构建。

当然,你能够一起做工程承继和工程聚合。这意味着,你能够为你的一切模块指定一个父工程,一起,父工程中能够指定其他的Maven工程为它的子模块。你只需求运用这三条规矩:

在一切子POM中指定它们的父POM。

将父POM的packaging元素的值设为”pom”。

在父POM中指定子模块(子POM)的目录。

Example 5

情形

仍是前次的POM,

com.mycompany.app:my-app:1’s POM

4.0.0

com.mycompany.app

my-app

1

com.mycompany.app:my-module:1’s POM

4.0.0

com.mycompany.app

my-module

1

目录构造

.

|-- my-module

| `-- pom.xml

`-- parent

`-- pom.xml

解决方案

一起做工程承继和工程聚合,你只需运用三条法则。

com.mycompany.app:my-app:1’s POM

4.0.0

com.mycompany.app

my-app

1

pom

../my-module

com.mycompany.app:my-module:1’s POM

com.mycompany.app

my-app

1

../parent/pom.xml

4.0.0

my-module

留意:装备承继的战略与POM承继的战略一样

工程改写和变量

Maven鼓舞的做法是不要做重复的作业(don’t repeat

yourself)。但总有在不一样的当地运用一样特点的状况。为了保证特点值指定一次,Maven答应你在POM运用你自个的变量或许预先界说的变量。

举个比方,为了运用project.version这个变量,你能够这么引证:

${project.version}

要留意的是这些变量在承继以后才会被处理。这意味着假如一个父工程运用了一个变量,它们在子工程中的界说与在父工程中的界说会不一样,是最后运用的那个。

可用的变量

工程模型变量

一个Model的任何字段都是一个独自的能够做为变量引证的值元素。例如,${project.groupId},

${project.version},${project.build.sourceDirectory} 等等。参阅POM reference

列举的全部特点。这些变量都用”project”前缀来引证。你能够看看pom references. 作为前缀,或许彻底省略前缀 –

这些方法如今现已抛弃不再运用了。

特殊变量

project.basedir当时工程地点的目录

project.baseUri当时工程地点的目录,表明为一个URI,Maven 2.1.0以后

maven.build.timestamp时刻戳,表明开端构建的时刻,Maven 2.1.0-M1以后

构建时刻戳的格局能够在maven.build.timestamp.format特点中自界说,示例如下:

...

yyyy-MM-dd'T'HH:mm:ss'Z'

...

格局化形式有必要恪守API文档中给出的规矩。假如这个特点不存在,默许值即是示例中给出的值

特点

你一样能够将任何在工程中界说的特点作为变量引证,看看下面的比方:

...

2.1

org.apache.maven

maven-artifact

${mavenVersion}

org.apache.maven

maven-project

${mavenVersion}

...

[font=Tahoma  ][font=Tahoma  ]

优质IT资源分享社区为你提供此文。

本站有大量优质Java教程视频,资料等资源,包含java基础教程,高级进阶教程等等,教程视频资源涵盖传智播客,极客学院,达内,北大青鸟,猎豹网校等等IT职业培训机构的培训教学视频,价值巨大。欢迎点击下方链接查看。

java教程视频

优质IT资源分享社区(www.itziyuan.top)
一个免费,自由,开放,共享,平等,互助的优质IT资源分享网站。
专注免费分享各大IT培训机构最新培训教学视频,为你的IT学习助力!

!!!回帖受限制请看点击这里!!!
!!!资源失效请在此版块发帖说明!!!

[PS:按 CTRL+D收藏本站网址~]

——“优质IT资源分享社区”管理员专用签名~

本版相似帖子

游客