共计 1886 个字符,预计需要花费 5 分钟才能阅读完成。
构建流程
Maven 不但有标准化的项目结构,而且还有一套标准化的构建流程,可以自动化实现编译,打包,发布,等等。
Lifecycle 和 Phase
使用 Maven 时,我们首先要了解什么是 Maven 的生命周期(lifecycle)。
Maven 的生命周期由一系列阶段(phase)构成,以内置的生命周期 default 为例,它包含以下 phase:
- 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
- initialize
- …
- prepare-package
- package
如果我们运行 mvn compile,Maven 也会执行default 生命周期,但这次它只会运行到compile,即以下几个 phase:
- validate
- initialize
- …
- process-resources
- 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(开始执行 default 生命周期的第一个 phase)
- initialize
- …
- prepare-package
- 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、phase 和 goal 已经明白了吧?

其实我们类比一下就明白了:
- lifecycle 相当于 Java 的 package,它包含一个或多个 phase;
- phase 相当于 Java 的 class,它包含一个或多个 goal;
- goal 相当于 class 的 method,它其实才是真正干活的。
大多数情况,我们只要指定 phase,就默认执行这些 phase 默认绑定的 goal,只有少数情况,我们可以直接指定运行一个 goal,例如,启动 Tomcat 服务器:
$ mvn tomcat:run
小结
Maven 通过 lifecycle、phase 和 goal 来提供标准的构建流程。
最常用的构建命令是指定 phase,然后让 Maven 执行到指定的 phase:
- mvn clean
- mvn clean compile
- mvn clean test
- mvn clean package
通常情况,我们总是执行 phase 默认绑定的 goal,因此不必指定 goal。






