maven有3个生命周期,分别是clean lifecycle、default lifecycle、site lifecycle,每个生命周期都是由若干个阶段过程(英文phase)组成。后面的phase的执行会依赖前面的phase,也就是说执行某个phase(假如叫N)时,其前面的phase也会依次被执行,maven总是从这个生命周期的第一步开始一直执行到N为止。下面是每个生命周期(lifecycle)包含的具体阶段(phase)。
一、clean lifecycle
pre-clean
clean:清理上次编译产生的文件
post-clean
二、default lifecycle
validate
generate-source
process-source
generate-resources
process-resources:复制资源文件到target目录的过程
compile:编译
process-classes
generate-test-source
process-test-source
generate-test-resources
process-test-resources:复制测试资源文件的过程
test-compile :编译测试java文件
process-test-classes
test :运行测试代码
prepare-package
package :打包成jar类型或者war类型
pre-integration-test
integration-test
post-integration-test
verify
install :安装(实际上就是拷贝)到本地仓库,其他项目就可以使用了
deploy :安装(实际上就是拷贝)到远程仓库,其他项目就可以使用了
三、site lifecycle
pre-site
site
post-site
site-deploy
知道了3个生命周期的阶段,我们再来回头强调一下maven的执行流程,比如我输入命令“mvn install”,那么maven就会从“pre-clean”这个阶段开始,一直执行到“install”这个阶段,这样说就懂了吧。
但是,现在我抛出个问题,我们知道maven是由java写成的,比如我执行clean的话,maven内部是由谁来完成这项工作的呢?不是maven本身,而是maven的插件,你输入的每一个phase名称都是调用的maven的插件,那么maven的插件是什么?maven的插件又是怎么和我输入的phase名称对应起来的呢,也就是说,我输入了clean这个phase名称,maven怎么知道要去执行哪个插件的哪个类来完成工作呢?请参考下篇文章“maven的插件以及与生命周期的绑定原理”