《Mavan官方文档》构建生命周期介绍-Java-优质IT资源分享社区

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

  《Mavan官方文档》构建生命周期介绍

楼主#
更多 发布于:2016-05-19 16:19

 《Mavan官方文档》构建生命周期介绍

原文网址:The Build Lifecycle

构建生命周期基础

Maven是以构建生命周期这个核心概念为基础。构建生命周期是指为一个工程进行项目构建和分发的过程。

为了构建一个工程,有必要去学习一系列构建Maven项目的命令,并且POM文件会确保他们能够得到想要的结果。

Maven中内置了三个构建生命周期:default,clean和site。default生命周期处理工程的部署,clean生命周期处理工程的清理,而site生命周期则负责创建工程的站点文档。

构建生命周期是由阶段组成的

三个构建生命周期都是由一系列不同的构建阶段组成,每一个构建阶段代表了生命周期的一个阶段。

例如:default生命周期是由以下的阶段组成(查看完整的生命周期阶段列表,请参考生命周期参考):

validate –

验证该项目是否正确,所有必要的信息都是可用的

compile – 编译工程源码

test –

使用一个合适的单元测试框架测试编译的源代码。这些测试的代码不会被打包或部署到项目中

package –

将编译的代码打包成它发布的格式,例如JAR

integration-test –

如果必要的话,该命令会将工程处理并部署在一个集成测试运行的环境中

verify –

运行任何检查以验证该包是否有效,是否符合质量标准

install –

将工程打包安装到本地仓库中,以便本地其他项目可以进行依赖

deploy –

在集成或发布环境中,将最终工程打包复制到远程仓库中,用于与其他开发人员和项目共享

这些生命周期阶段(包括那些这里没有展示的其他生命周期阶段)会顺序地执行来完成默认的生命周期。上述的生命周期阶段,意味着当你使用默认的生命周期时,Maven将首先验证项目,然后将编译源代码,运行那些单元测试,再打包二进制文件(例如:jar),然后再对包文件进行集成测试,再校验包文件,并将已经校验的包文件安装到本地仓库,然后在指定的环境中部署包。

要做到所有这些,你只需要调用最后一个生命阶段来执行,在这种情况下进行部署:

mvn deploy

这是因为如果你调用了一个生命阶段,它不仅执行指定的构建阶段,而且会执行指定构建阶段之前的每一个阶段。因此,执行

mvn integration-test

将会先执行该阶段之前的每一个阶段(validate,

compile, package等)。

生命周期中包含了许多命令,这些将要在接下来的部分进行讨论。

需要指出的是同样的命令可以用在多模块的情况下(即包含一个或多个子项目的工程)。例如:

mvn clean install

这个命令将会遍历所有的子项目,并且运行clean命令,然后运行install命令(包含所有之前步骤的命令)

构建阶段是由插件目标组成的

即便构建阶段在生命周期中是一个特定的步骤,但是它实现这些功能的方式也可能会有所不同。这些功能是通过声明插件目标并且绑定到具体的构建阶段来实现的。

一个插件目标代表了一个特定的任务(比构建阶段更加贴切),这个任务有助于项目的建立和管理。它可能被绑定到零个或多个构建阶段。一个目标没有被绑定到任何构建阶段,可以通过直接调用来执行这个构建生命周期以外的目标。执行的顺序取决于目标和构建阶段的顺序。例如以下的这个命令:clean和package的参数是构建阶段,而dependency:copy-dependencies是一个插件目标。

mvn clean

dependency:copy-dependencies package

如果这个命令被执行,clean阶段将首先执行(这意味着它将运行所有的clean生命周期前的阶段,包括clean阶段自身),然后在执行package阶段之前(及其前建立默认的生命周期阶段),将执行dependency:copy-dependencies目标。

如果一个目标被绑定到一个或多个构建阶段,这个目标将会被这些阶段所调用。

此外,构建阶段也可以绑定零个或更多的目标。如果构建阶段没有绑定目标,则该构建阶段将不执行。但如果它有一个或多个目标,它将执行所有这些绑定的目标(注:在Maven2.0.5及以上版本,多目标绑定到一个阶段是按照POM文件中定义的顺序进行执行,但是相同插件不支持多个实例。在Maven2.0.11及以上版本,相同插件的多个实例被划分成一个组,统一并有序地执行)。

使用构建生命周期来设置项目

构建生命周期的使用足够简单,但是当你为一个项目进行Maven构建时,你如何分配每个构建阶段的任务呢?

第一,也是最常见的方式,就是通过相同名称的POM元素来为你的项目设置包。一些有效的包的值如下:jar,war,

ear和pom。如果没有指定包的值,它将默认为jar包。

每一次打包都包含一系列绑定了特殊阶段的目标。例如,打jar包将绑定以下目标,来构建默认生命周期中的各个阶段。

process-resources

resources:resources

compile

compiler:compile

process-test-resources

resources:testResources

test-compile

compiler:testCompile

test

surefire:test

package

jar:jar

install

install:install

deploy

deploy:deploy

这是一个几乎标准的绑定设置;然而,一些包的处理方式有所不同。例如,一个项目,是纯粹的元数据(包的值是POM),它仅仅绑定了install和deploy阶段(获取一个完整的打包类型的目标构建清单,请参考生命周期参考)。

值得注意的是,一些包类型即便可用,您可能还需要在你的POM文件中的build部分引入一个特殊的插件并且为那个插件定义true。举个例子,每个插件都需要引入Plexus这个插件,它提供了plexus-application和plexus-service包。

插件

向构建阶段加入目标的第二种方式是在你的项目中配置插件。插件就是向Maven提供目标的构建。此外,一个插件可能会有一个至多个的目标,插件中的每一个目标都代表了插件的一个功能。例如:编译插件拥有两个目标:compile和testCompile目标。前者会编译你的功能代码,而后者则会编译测试代码。

正如你将要在后面部分看到的那样,插件会包含一些显示目标具体绑定到哪个生命周期阶段的信息。注意,只添加一个插件自身的信息是不够的,你必须同时定义你想要运行的目标来做为你插件的一部分。

已经配置的目标将会被添加到已经绑定了包的生命周期的目标上去。如果有超过一个目标绑定到一个特殊的阶段,包中配置的目标将会被优先执行,然后再执行POM中配置的目标。注意,你可以使用元素来控制特殊目标的顺序。

例如,Modello插件默认将它的目标modello:java绑定到了generate-sources阶段(注:modello:java目标用于生成java源代码)。所以当使用Modello插件并想让它集成到一个构建阶段中来生成一个模块的代码时,你需要将下列代码添加到你POM文件元素下的中:

...

org.codehaus.modello

modello-maven-plugin

1.8.1

src/main/mdo/maven.mdo

4.0.0

java

...

你也许会疑惑为什么元素会放在这。那是为了让你能够在需要时多次运行不同配置的同一目标。也可以通过设置一个ID来实现单独运行,以便于不管是目标配置被分割还是进入一个额外的排除,你都能够控制继承或者应用程序的配置。

当设置的多个排除匹配同一个特殊阶段时,他们按照POM文件中定义的顺序执行,继承的排除设置优先执行。

现在,在modello:java这种情况下,它仅仅在generate-sources阶段起作用。但是许多目标能够在多个阶段中使用,而且他们没有一个明确的默认值。对于这些,你可以自定义阶段。比如说,你有一个目标display:time,它能够将当前的时间回显在命令行中,你想在开始测试时,让它在process-test-resources阶段运行,去显示当前时间。这就应该像这样配置:

...

com.mycompany.example

display-maven-plugin

1.0

process-test-resources

time

...

生命周期参考

下面的列表就是default,clean和site生命周期中的所有构建阶段,他们将会按照他们定义的顺序去执行。

Clean生命周期

pre-clean

执行一些清理前需要完成的工作

clean

清理上一次构建生成的文件

post-clean

执行一些清理后需要完成的工作

Default生命周期

validate

校验项目是否正确以及所有重要信息是否可用

initialize

初始化构建状态,例如:设置属性或者创建目录

generate-sources

生成编译中包含的源代码

process-sources

处理项目资源文件,例如过滤一些值

generate-resources

生成包中包含的资源

process-resources

复制并处理资源到目标目录,准备打包

compile

编译项目中的源代码

process-classes

后处理编译生成的文件,例如:对class文件进行字节码增强

generate-test-sources

生成编译中包含的测试源码

process-test-sources

处理测试源代码,例如:过滤一些值

generate-test-resources

创建测试用的资源文件

process-test-resources

复制并处理资源到目标测试目录

test-compile

编译测试源码放入测试目标文件夹中

process-test-classes

后处理测试编译生成的文件,例如:对class文件进行字节码增强,对Maven

2.0.5及以上有效

test

使用单元测试框架运行测试。测试代码不会被打包或者部署。

prepare-package

执行必要的操作,在真正打包前准备一个包。这通常会产生一个未打包、处理过版本。(Maven

2.1及以上)

package

接受编译好的代码,打包成可发布的格式,如:JAR

pre-integration-test

在集成测试执行前进行些必要的操作。这也许会涉及相关的东西,例如安装必须的环境。

integration-test

处理并将包文件部署到继承测试运行的环境

post-integration-test

继承测试执行之后进行的必要操作。这可能包含了清理环境操作。

verify

运行一些校验去验证包是否有效,是否符合质量标准。

install

安装包到本地仓库,供本地其他项目依赖使用

deploy

将最终的包复制到远程仓库,供其他开发人员和Maven项目使用

Site生命周期

pre-site

执行一些在生成站点之前需要完成的工作

site

生成项目的站点文档

post-site

执行一些在生成站点之后需要完成的工作

site-deploy

将生成的站点文件发布到远程服务器上

内置的生命周期绑定

许多阶段都默认绑定了一些目标。对默认生命周期来说,这些绑定依赖包的值,一下就是一些目标和构建阶段的绑定。

Clean生命周期绑定

clean

clean:clean

Default生命周期绑定 – 包 ejb / ejb3 /

jar / par / rar / war

process-resources

resources:resources

compile

compiler:compile

process-test-resources

resources:testResources

test-compile

compiler:testCompile

test

surefire:test

package

ejb:ejb or ejb3:ejb3 or jar:jar

or par:par or rar:rar or war:war

install

install:install

deploy

deploy:deploy

Default生命周期绑定 – 包 ear

generate-resources

ear:generate-application-xml

process-resources

resources:resources

package

ear:ear

install

install:install

deploy

deploy:deploy

Default生命周期绑定 – 包

maven-plugin

generate-resources

plugin:descriptor

process-resources

resources:resources

compile

compiler:compile

process-test-resources

resources:testResources

test-compile

compiler:testCompile

test

surefire:test

package

jar:jar and

plugin:addPluginArtifactMetadata

install

install:install

deploy

deploy:deploy

Default生命周期绑定 – 包 pom

package

site:attach-descriptor

install

install:install

deploy

deploy:deploy

Site生命周期绑定

site

site:site

site-deploy

site:deploy

参考

全部的Maven生命周期是由maven-core模块的components.xml文件定义的,可以参考associated

documentation

在Maven

2.x中,默认生命周期绑定被包含在components.xml中,但在Maven

3.x中,他们被单独定义在default-bindings.xml描述文件中。

您可以直接从源码生成的最新文档中查看生命周期参考 和

默认生命周期插件绑定参考。

优质IT资源分享社区为你提供此文。 [font=Tahoma  ]

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

java教程视频

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

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

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

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

本版相似帖子

游客