构建周期简介

本文介绍了Maven构建过程的核心概念,包括构建周期、构建阶段及目标等。详细解释了Maven如何通过不同的构建周期(如default、clean和site)来自动化项目的构建、清理和文档生成流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

术语表:
构建周期:build lifecycle
构建阶段:build phase
目标:goal
1.     概述
Maven 2.0的核心概念就是构建周期。这意味着构建和发布产品的过程都被明确的定义。
对于要进行项目构建的开发人员,这意味着只需要知道很少的命令,就可以构建任何的Maven项目,由POM确保需要的结果是正确的。
Maven包含了三个内建(built-in)的构建周期:default、clean和site。default构建周期用于处理项目的部署,clean构建周期处理项目的清理,而site构建周期则完成项目的站点文档。
2.     构建周期的构成
上述的内建的构建过程都是由一系列构建阶段(build phases)组成的,一个构建阶段代表了构建周期中的一个步骤。
例如:默认的构建周期包含以下的构建阶段(完整的构建阶段列表,请参考下文的构建周期参考)
validate:验证项目是否正确,以及所有必要的信息可用
compile:编译源代码
test:使用适当的单元测试框架(e.g.JUnit)来测试编译完成的源代码,这些测试用例应该可以测试发布的代码或者打包的代码
package:将便宜王成的代码打包成要发布的格式,例如JAR。
integration-test:处理并发布已经完成的包到集成环境,以便进行集成测试
verify:运行检查包是否正确并满足质量要求的检查
install:将package安装到本地的存储库,可以作为本地其它项目的依赖
deploy:集成测试或者释放环境的时候来完成,将最终包拷贝到远程存储库以备其他开发人员或者项目使用
这些构建阶段(以及未在此列出的构建阶段)按照顺序执行,以便完成整个default构建周期。以上面的为例子,这意味着当使用default构建过程时,Maven首先验证项目,然后编译源代码,运行源代码测试用例,打包,运行集成测试,检查包文件,安装检查过的包文件到本地存储库,然后将安装完成的包发布到指定的环境。
为了执行所有这些过程,可以通过调用最后一个构建阶段,也就是说,deploy:
mvn deploy
这是因为在调用构建阶段的时候,Maven不仅仅执行调用的构建阶段,而是运行优先的其他的构建阶段,也就是说,调用
mvn integration-test
时,就会运行所有它之前的构建阶段(validate,compile,package,etc.)。
其实对于一个构建过程来说,有更多的命令,我们将在下一节中进行讨论。
注意,同一个命令可以在多个模块中使用,例如:
mvn clean install
这个命令会遍历所有子项目,并运行clean,然后运行install(以及它们的前置步骤)。
3.     构建阶段的构成
虽然构建阶段只是构建周期中的一个特定的步骤,但是它所表现的职责却不一定相同,这通过定义属于构建阶段的目标(goals)来完成。
一个目标就代表了一个特定的任务(这比构建阶段更加的精确),用于构建和管理项目。可以绑定到0个或者多个构建阶段。没有绑定到任何构建阶段的目标可以在构建周期外部直接调用。执行的顺序取决于目标和构建阶段被调用的顺序。例如下面的命令行中,clean和package参数是构建阶段,dependency:copy-dependencies是一个目标。
mvn clean dependency:copy-dependencies package
如果上述命令被执行的话,那么首先执行clean阶段,也就是说会运行所有clean构建周期的前导阶段,加上clean阶段自身。然后运行dependency:copy-dependencies目标。最后执行package阶段。
如果目标被绑定到1个或者多个阶段,那么目标会在所有那些阶段中被调用。
一个构建阶段也可以绑定一个或者多个目标。如果构建阶段没有绑定到它的目标,构建阶段就不会执行。如果有1个或者多个目标绑定到它,他就会执行所有的目标。
4.     设置构建周期
构建周期易于使用,但是当对项目使用Maven构建时,如何对构建阶段分配任务呢?
打包
首先,也是最常用的方式是使用POM中定义的元素<package>来设置打包任务。打包的合法的值包括jar、war、ear和pom。默认的值为jar。
每种打包任务都包含了一系列的目标绑定到特定的阶段。例如,对于jar打包来说,下面的目标会绑定到default构建周期的构建阶段:
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
这是最标准的绑定集。但是,有些打包任务对它们的处理不同,例如,一个项目是纯metadata(打包的值是pom),那么将绑定目标到install和deploy阶段。
Plugins
另外一种将目标加到阶段的方法是在项目中配置插件。插件是为Maven提供目标的产品。并且,插件可能包含1个或者多个目标,每个目标都代表了插件的所提供的功能。例如,Compiler插件有两个目标:compile和testCompile。前者用于编译main源代码,后者用于编译测试源代码。
插件包含了目标将被绑定到哪一个构建阶段的信息。注意只添加插件是不够的,必须指定在构建过程中要运行的目标。
被配置的目标会添加到已经绑定到构建周期的目标中。如果一个构建阶段被绑定了多个目标,那么执行的顺序是,先执行打包的目标,然后执行在POM中配置的目标。注意,可以通过使用<executions>元素来更好的控制特定目标执行的顺序。
5.     构建周期参考
下面的列表列出了default,clean和site构建周期的所有构建阶段,执行的顺序和列出的顺序一致。
Clean构建周期
pre-clean:预清理项目
clean:移除前次构建过程生成的所有文件
post-clean:结束清理后的工作
 
Default构建周期
validate:验证项目是否正确,以及必要的信息是否可用
generate-sources:生成在编译过程中需要包含的代码
process-sources:处理源代码,例如过滤特定的值
generate-resources:生成package中包含的资源
process-resources:将资源拷贝或者处理(native2ascii)到目标目录,为打包做准备
compile:编译工程的源代码
process-classes:对编译生成的文件进行处理,例如进行字节码的增强
generate-test-sources:生成编译过程中包含的测试源代码
process-test-sources:处理测试源代码,例如过滤特定的值
generate-test-resources:创建测试用的资源
process-test-resources:将资源拷贝或者处理(native2ascii)到测试目标目录
test-compile:编译测试的源代码
process-test-classes:对测试编译生成的文件进行处理,例如进行字节码的增强
test:使用合适的测试框架运行测试代码
prepare-package:执行所有在实际打包操作前的操作,这个操作的结果一般是产生实际打包钱的所有内容,包括目录结构等
package:将编译后的代码进行打包,生成可发布格式的文件,例如JAR
pre-integration-test:执行集成测试前的操作
integration-test:处理并发布包
post-integration-test:执行集成测试结束后的操作,例如清理环境
verify:运行检查包是否合法或者满足质量要求
install:将package安装到本地的存储库,可以作为本地其它项目的依赖
deploy:集成测试或者释放环境的时候来完成,将最终包拷贝到远程存储库以备其他开发人员或者项目使用
 
Site构建周期
pre-site:在生成实际的项目站点前,执行必要的操作
site:生成站点的文档
post-site:执行生成站点后的操作,并准备发布站点
site-deploy:发布站点
6.     内建的构建周期绑定
有些构建阶段有默认的目标绑定。对于默认的构建周期,这些绑定依赖于packaging的值,下面是一些goal-to-build-phase绑定。
Clean构建周期绑定
clean:       clean:clean
Default构建周期绑定packaging ejb/ejb3/jar/par/rar/war
process-resources:   resources:resources
compile:     compilter:compile
process-test-resources:      resources:testResource
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构建周期绑定packaging ear
generate-resources  ear:generateApplicationXml
process-resources    resources:resources
package      ear:ear
install      install:install
deploy       deploy:deploy
Default构建周期绑定packaging maven-plugin
generate-resources  plugin:descriptor
process-resources    resources:resources
compile      compiler:compile
process-test-resources       resources:testResource
test-compile         compiler:testCompile
test         surefire:test
package      jar:jar and plugin:addPluginArtifactMetadata
install      install:install and plugin:updateRegistry
deploy       deploy:deploy
Default构建周期绑定 - Packaging pom
package      site:attach-descriptor
install      install:install
deploy       deploy:deploy
Site构建周期绑定
site         site:site
site-deploy
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值