### Lifecycle和Phase 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 - ... - 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。 ### 常用命令 在实际开发过程中,经常使用的命令有: `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: 其实我们类比一下就明白了: - lifecycle相当于Java的package,它包含一个或多个phase; - phase相当于Java的class,它包含一个或多个goal; - goal相当于class的method,它其实才是真正干活的。