解释:
一个生命周期由若干个生命周期阶段组成,每个生命周期阶段绑定注册若干个目标,可人为注册目标到指定处。
Maven具有三种标准的生命周期:clean、default(构建)、site。
构建:
构建一个生命周期则完整的按序执行每个阶段的目标;构建一个生命周期阶段则按序执行不越过这个阶段的所有目标。
clean
包含3个生命周期阶段:pre-clean, clean, post-clean
自定义clean插件的行为:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<
build
>
<
plugins
>
<
plugin
>
<
artifactId
>maven-clean-plugin</
artifactId
>
<
configuration
>
<
filesets
>
<
fileset
>
<
directory
>target-other</
directory
>
<
includes
>
<
include
>*.class</
include
>
</
includes
>
</
fileset
>
</
filesets
>
</
configuration
>
</
plugin
>
</
plugins
>
</
build
>
|
default
默认生命周期阶段描述表(按序):
序号 | 生命周期阶段 | 描述 |
1 | validate | 验证项目一些必要的信息 |
2 | generate-sources | 生成编译过程需要的源代码 |
3 | process-sources | 处理源代码 |
4 | generate-resources | 生成打包需要的资源文件 |
5 | process-resources | 复制并处理资源文件至目标目录 |
6 | compile | 编译源代码 |
7 | process-classes | 后处理字节码文件 |
8 | generate-test-sources | 略 |
9 | process- test-sources | 略 |
10 | generate- test-resources | 略 |
11 | process- test-resources | 略 |
12 | test-compile | 略 |
13 | test | 使用单元测试框架运行测试 |
14 | prepare-package | 打包前准备操作 |
15 | package | 编译好的代码打包成可分发的格式 |
16 | pre-integration-test | 集成测试运行前操作 |
17 | integration-test | 集成测试 |
18 | post-integration-test | 集成测试后操作 |
19 | verify | 检查 |
20 | install | 安装到本地仓库 |
21 | deploy | 发布到远程仓库 |
site
生成项目文档和报告站点的专有的生命周期。
包含4个阶段:pre-site, site, post-site, site-deploy
默认绑定到站点生命周期的阶段目标是:site阶段绑定site:site,site-deploy阶段绑定site:deploy。
不同打包方式下的生命周期
1, jar packaging
默认打包类型,默认打包目标有:
生命周期阶段 目标
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
2, pom packaging
生成的构件只是它本身,默认打包目标有:
生命周期阶段 目标
package site:attach-descriptor
install install:install
deploy deploy:deploy
3, war packaging
生命周期阶段 目标
process-resources resources:resources
compile compiler:compile
process-test-resources resources:testResources
test-compile compiler:testCompile
test surefire:test
package war:war
install install:install
deploy deploy:deploy
4, 其他打包类型
maven plugin, ear, ejb, swf, swc, nar等。
可自定义打包类型,自定义打包类型需要配置定义了定制打包类型生命周期的插
件,如为Adobe Flex (SWF)定制打包类型:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
<
project
>
...
<
packaging
>swf</
packaging
>
...
<
build
>
<
plugins
>
<
plugin
>
<
groupId
>net.israfil.mojo</
groupId
>
<
artifactId
>maven-flex2-plugin</
artifactId
>
<
version
>1.4-SNAPSHOT</
version
>
<
extensions
>true</
extensions
>
<
configuration
>
<
debug
>true</
debug
>
<
flexHome
>${flex.home}</
flexHome
>
<
useNetwork
>true</
useNetwork
>
<
main
>org/sonatype/mavenbook/Main.mxml</
main
>
</
configuration
>
</
plugin
>
</
plugins
>
</
build
>
...
</
project
>
|
通用生命周期目标
resources:resources
默认绑定到process-resources阶段,默认行为是将src/main/resources下的资源文件复制到target/classes下,且会应用资源过滤器。
资源过滤:即资源变量替换。可以再xml资源文件中使用${}引用properties配置文件属性值,要想正常使用,还要再POM文件增加资源过滤配置(属性替换)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
<
em
><
build
>
<
filters
>
<
filter
>src/main/filters/default.properties</
filter
> 属性配置文件
</
filters
>
<
resources
>
<
resource
>
<
directory
>src/main/resources</
directory
>
<
filtering
>true</
filtering
> 过滤开关,只有打开才会替换变量
</
resource
>
从这里可以看出,可以配置额外的资源目录,如
<
resource
>
<
directory
>src/main/xml</
directory
>
<
includes
><
include
>文件名</
include
></
includes
>
<
targetPath
>目标路径,默认为target/classes</
targetPath
>
</
resource
>
</
resources
>
</
build
></
em
>
|
compile:compile
默认绑定到compile阶段,默认行为是编译所有源代码并在构建输出目录存放编译后文件。默认源目录:src/main/java,默认目标目录:target/classes,默认source为1.3,默认target为1.1。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<
em
><
build
>
...
<
plugins
>
<
plugin
>
<
artifactId
>maven-compiler-plugin</
artifactId
>
<
configuration
>
<!---->
<
source
>1.5</
source
>
<
target
>1.5</
target
>
</
configuration
>
</
plugin
>
</
plugins
>
...
</
build
></
em
>
|
process-test-resources
处理单元测试资源。
test-compile
单元测试编译阶段。目标:compile:testCompile,默认输出目录以及自定义方式类同compile阶段。
Test
大部分生命周期绑定Surefire插件的test目标至test阶段。默认情况下单元测试失败后停止构建,我们可以覆盖这种行为,让构建继续进行(或者直接跳过测试阶段 –Dmaven.test.skip=true):
1
2
3
4
5
6
7
8
9
10
11
12
|
<
em
><
build
>
<
plugins
>
<
plugin
>
<
groupId
>org.apache.maven.plugins</
groupId
>
<
artifactId
>maven-surefire-plugin</
artifactId
>
<
configuration
>
<
testFailureIgnore
>true</
testFailureIgnore
>
</
configuration
>
</
plugin
>
...
</
plugins
>
</
build
></
em
>
|
Install
Install插件的install目标基本上都是绑定到install生命周期阶段。install:install目标将项目的主要构件安装到本地仓库。
Deploy
Deploy插件的deploy目标通常绑定到deploy生命周期阶段。该阶段将一个构件部署到远程Maven仓库,更新一些可能被此次部署影响的仓库信息。这里详细暂不讨论。