构建流程
Maven不但有标准化的项目结构,还有一套标准化的构建流程,可以自动化实现编译,打包,发布等等
Lifecycle:maven的生命周期
Phase:maven的生命周期由一系列阶段(phase)构成,内置的default
生命周期,包括以下阶段:
· validate
· initialize
· generate-sources
· process-sources
· generate-resources
· process-resources
· compile
· process-classes
· generate-test-sources
· process-test-sources
· generate-test-resources
· process-test-resources
· test-compile
· process-test-classes
· test
· prepare-package
· package
· pre-integration-test
· integration-test
· post-integration-test
· verify
· install
· deploy
如果我们运行mvn package
,Maven就会执行default
生命周期,它会从开始一直运行到package这个phase为止:
· validate
· ...
· package
如果我们运行mvn compile
,Maven也会执行default
生命周期,但这次它只会运行到compile,即以下几个phase:
· validate
· ...
· compile
Maven另一个常用的生命周期是clean
,它会执行3个phase:
· pre-clean
· clean (注意这个clean不是lifecycle而是phase)
· post-clean
所以,我们使用mvn这个命令时,后面的参数是phase,Maven自动根据生命周期运行到指定的phase。
更复杂的例子是指定多个phase,例如,运行mvn clean package
,Maven先执行clean
生命周期并运行到clean
这个phase,然后执行default
生命周期并运行到package
这个phase,实际执行的phase如下:
· pre-clean
· clean (注意这个clean是phase)
· validate
· ...
· package
在实际开发过程中,经常使用的命令有:
mvn clean
:清理所有生成的class和jar;
mvn clean compile
:先清理,再执行到compile;
mvn clean test
:先清理,再执行到test,因为执行test前必须执行compile,所以这里不必指定compile;
mvn clean package
:先清理,再执行到package。
大多数phase在执行过程中,因为我们通常没有在pom.xml
中配置相关的设置,所以这些phase什么事情都不做
经常用到的phase其实只有几个:
clean
:清理
compile
:编译
test
:运行测试
package
:打包
Goal
执行一个phase又会触发一个或多个goal:
执行的Phase | 对应执行的Goal |
---|---|
compile | compiler:compile |
test | compiler:testCompile//surefire:test |
goal的命名总是abc:xyz这种形式
其实我们类比一下就明白了:
lifecycle相当于Java的package,它包含一个或多个phase;
phase相当于Java的class,它包含一个或多个goal;
goal相当于class的method,它其实才是真正干活的。
大多数情况,我们只要指定phase,就默认执行这些phase默认绑定的goal,只有少数情况,我们可以直接指定运行一个goal,例如,启动Tomcat服务器:
mvn tomcat:run
网友评论