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打包将绑定以下目标来构建默认生命周期的各个阶段。
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插件有两个目标:compile
和testCompile
。前者编译主代码的源代码,而后者编译测试代码的源代码。
插件可以包含将插件目标绑定到哪个生命周期阶段的信息。请注意,仅添加插件本身是不够的——您还必须指定希望作为构建的一部分运行的插件目标。
配置的插件目标将被绑定到,所选包的生命周期目标中。如果将多个目标绑定到特定阶段,则使用的顺序是首先执行来自包装的目标,然后执行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
pre-clean
在实际项目清理之前执行所需的过程
clean
删除以前生成的所有文件
post-clean
执行完成项目清理工作所需的流程
Default Lifecycle
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
pre-site
在实际项目站点生成之前执行所需的过程
site
生成项目的站点文档
post-site
执行完成站点生成和准备站点部署所需的流程
site-deploy
将生成的站点文档部署到指定的web服务器
内置阶段目标绑定
有些阶段的目标是默认绑定的。对于默认的生命周期,这些绑定依赖于打包值。
下面是一些构建阶段与插件目标的绑定关系。
Clean Lifecycle Bindings
clean
clean:clean
Default Lifecycle Bindings - Packaging 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
orejb3:ejb3
orjar:jar
orpar:par
orrar:rar
orwar:war
install
install:install
deploy
deploy:deploy
Default Lifecycle Bindings - Packaging ear
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
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
andplugin:addPluginArtifactMetadata
install
install:install
deploy
deploy:deploy
Default Lifecycle Bindings - Packaging pom
package
install
install:install
deploy
deploy:deploy
Site Lifecycle Bindings
site
site:site
site-deploy
site:deploy
以上是 ApacheMaven项目构建的生命周期 的全部内容, 来源链接: utcz.com/z/513596.html