ApacheMaven项目构建的生命周期

编程

官方说明:https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

 

基础知识

Maven通过生命周期的概念,将项目的构建和分发过程分步骤进行了清晰的定义。对于构建项目的人来说,只需要学习一组命令就可以构建任何Maven项目。每个步骤的执行属性和参数都可以使用POM文件进行定义。

 

构建和阶段

maven的生命周期由三个内置的构建组成:

clean 用于处理项目清理。主要阶段包括clean

default 用于处理项目部署。其中主要阶段包括validate、compile、test、package、verify、install、deploy

site 处理站点文档的创建。其中主要阶段包括site

这些生命周期阶段(加上这里没有显示的其他生命周期阶段)按顺序执行,以完成默认的生命周期。

阶段

命令

说明

clean

mvn clean

删除以前生成的所有文件。

validate

mvn validate

确认项目是正确的,所有必要的信息都是可用的。

compile

mvn compile

编译项目的源代码。

test

mvn test

使用合适的单元测试框架运行测试。这些测试不应该要求对代码进行打包或部署。

package

mvn package

将编译后的代码打包成可分发的格式,例如JAR。

verify

mvn verify

运行任何检查来验证包是否有效并满足质量标准。

install

mvn install

将包安装到本地存储库中,作为本地其他项目的依赖项使用。

deploy

mvn deploy

在集成或发布环境中完成,将最终的包复制到远程存储库,以便与其他开发人员和项目共享。

site

mvn site

生成项目的站点文档

同一个命令可以在多模块场景中使用(例如,一个项目有一个或多个子项目)。Maven遍历每个子项目并执行命令(包括前面的所有构建阶段步骤)。

 

插件和目标

插件是向Maven提供目标的构件,一个插件可能有一个或多个目标,其中每个目标代表该插件的一个功能。

即使阶段负责构建生命周期中的特定步骤,它执行这些职责的方式也可能不同。这是通过声明绑定到那些阶段目标来实现的, 也就是说同样是package构建阶段但是绑定了不同的目标而会产生不同行为。

插件目标是一个特定的任务,可以绑定到某个构建阶段也可以单独执行。例如,下面的例子dependency:copy-dependencies就是一个插件目标,而package是一个构建阶段。

mvn clean dependency:copy-dependencies package

如果一个目标被绑定到一个或多个构建阶段,那么该目标将在所有这些阶段中被调用。阶段还可以有零个或多个目标与之绑定。如果阶段没有绑定目标,那么该阶段将不会执行。但是如果它绑定了一个或多个目标,它将执行所有这些目标。

 

项目生命周期设置

Packaging

我们可以通过项目的POM元素<packaging>设置项目的打包类型。默认的包装值是jar、war、ear和pom,如果没有指定打包值,则默认为jar。

每个打包要绑定到特定阶段的插件目标。例如,jar打包将绑定以下目标来构建默认生命周期的各个阶段。

Phase

plugin:goal

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

Plugins

向构建阶段添加插件目标的方法是在项目中的pom文件进行配置。插件是向Maven提供目标的构件,一个插件可能有一个或多个目标,其中每个目标代表该插件的一个功能。例如,Compiler插件有两个目标:compiletestCompile。前者编译主代码的源代码,而后者编译测试代码的源代码。

插件可以包含将插件目标绑定到哪个生命周期阶段的信息。请注意,仅添加插件本身是不够的——您还必须指定希望作为构建的一部分运行的插件目标。

配置的插件目标将被绑定到,所选包的生命周期目标中。如果将多个目标绑定到特定阶段,则使用的顺序是首先执行来自包装的目标,然后执行POM中配置的目标。注意,您可以使用<executions>元素来获得对特定目标顺序的更多控制。

例如,Modello插件默认将其目标modello:java绑定到generate-sources阶段(注意:modello:java目标生成java源代码)。因此,要使用Modello插件并让它从模型生成源代码并将其合并到构建中,您需要在<build><plugins>部分中向POM添加以下内容:

...

<plugin>

<groupId>org.codehaus.modello</groupId>

<artifactId>modello-maven-plugin</artifactId>

<version>1.8.1</version>

<executions>

<execution>

<configuration>

<models>

<model>src/main/mdo/maven.mdo</model>

</models>

<version>4.0.0</version>

</configuration>

<goals>

<goal>java</goal>

</goals>

</execution>

</executions>

</plugin>

...

您可能想知道为什么会有<executions>元素。如果需要您可以使用不同的配置多次运行相同的目标。还可以为单独的执行提供一个ID,以便在继承或概要文件应用程序期间控制目标配置是合并还是转换为附加执行。当多个执行与特定阶段相匹配时,它们将按照POM中指定的顺序执行,首先运行继承的执行。

现在,对于modello:java,它只在generate-sources阶段有意义。但是,有些目标可以在多个阶段中使用,因此可能不会出现合理的默认情况,您可以自己指定阶段。例如,假设您有一个目标display:time响应当前时间到命令行,您希望它在process-test-resources阶段运行,以指示何时开始测试。配置如下:

...

<plugin>

<groupId>com.mycompany.example</groupId>

<artifactId>display-maven-plugin</artifactId>

<version>1.0</version>

<executions>

<execution>

<phase>process-test-resources</phase>

<goals>

<goal>time</goal>

</goals>

</execution>

</executions>

</plugin>

...

 

完整的列生命周期列表

下面列出了default clean site 生命周期的所有构建阶段,它们按照指定的顺序执行。(来自官方文档)

Clean Lifecycle

Phase

Description

pre-clean

在实际项目清理之前执行所需的过程

clean

删除以前生成的所有文件

post-clean

执行完成项目清理工作所需的流程

Default Lifecycle

Phase

Description

validate

确认项目是正确的,所有必要的信息都是可用的。

initialize

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

generate-sources

生成编译中包含的任何源代码。

process-sources

处理源代码,例如过滤任何值。

generate-resources

生成包中包含的资源。

process-resources

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

compile

编译项目的源代码。

process-classes

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

generate-test-sources

生成编译中包含的任何测试源代码。

process-test-sources

处理测试源代码,例如过滤任何值。

generate-test-resources

为测试创建资源。

process-test-resources

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

test-compile

将测试源代码编译到测试目标目录中

process-test-classes

对测试编译生成的文件进行后处理,例如对Java类进行字节码增强。适用于Maven 2.0.5及以上。

test

使用合适的单元测试框架运行测试。这些测试不应该要求对代码进行打包或部署。

prepare-package

在包装前进行任何必要的准备工作。这通常会导致一个未打包的、经过处理的包。(Maven 2.1及以上)

package

将编译后的代码打包成可分发的格式,例如JAR。

pre-integration-test

在执行集成测试之前执行所需的操作。这可能涉及诸如设置所需环境之类的事情。

integration-test

如果需要,处理和部署包到可以运行集成测试的环境中。

post-integration-test

执行集成测试后所需的操作。这可能包括清理环境。

verify

运行任何检查来验证包是否有效并满足质量标准。

install

将包安装到本地存储库中,作为本地其他项目的依赖项使用。

deploy

在集成或发布环境中完成,将最终的包复制到远程存储库,以便与其他开发人员和项目共享。

Site Lifecycle

Phase

Description

pre-site

在实际项目站点生成之前执行所需的过程

site

生成项目的站点文档

post-site

执行完成站点生成和准备站点部署所需的流程

site-deploy

将生成的站点文档部署到指定的web服务器

 

内置阶段目标绑定

有些阶段的目标是默认绑定的。对于默认的生命周期,这些绑定依赖于打包值。

下面是一些构建阶段与插件目标的绑定关系。

Clean Lifecycle Bindings

Phase

plugin:goal

clean

clean:clean

Default Lifecycle Bindings - Packaging ejb / ejb3 / jar / par / rar / war

Phase

plugin:goal

process-resources

resources:resources

compile

compiler:compile

process-test-resources

resources:testResources

test-compile

compiler:testCompile

test

surefire:test

package

ejb:ejborejb3:ejb3orjar:jarorpar:parorrar:rarorwar:war

install

install:install

deploy

deploy:deploy

Default Lifecycle Bindings - Packaging ear

Phase

plugin:goal

generate-resources

ear:generate-application-xml

process-resources

resources:resources

package

ear:ear

install

install:install

deploy

deploy:deploy

Default Lifecycle Bindings - Packaging maven-plugin

Phase

plugin:goal

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:jarandplugin:addPluginArtifactMetadata

install

install:install

deploy

deploy:deploy

Default Lifecycle Bindings - Packaging pom

Phase

plugin:goal

package

 

install

install:install

deploy

deploy:deploy

Site Lifecycle Bindings

Phase

plugin:goal

site

site:site

site-deploy

site:deploy

以上是 ApacheMaven项目构建的生命周期 的全部内容, 来源链接: utcz.com/z/513596.html

回到顶部