Maven 实战系列(五)构建生命周期
本文用于理顺 Maven 构建的生命周期(Build Lifecycle)概念,掌握执行 Maven 命令时其背后的原理。
构建
生命周期(Lifecycle)
生命周期(Lifecycle)是一个抽象的概念,意味着它并不做任何实质性的事情,也就是说它像接口,只定义规范,具体细节不管。具体的实现细节则交给了 Maven 各个插件(Plugin)。
生命周期(Lifecycle)是一系列有序的阶段(Phase),而插件的目标(Goal)是跟某个生命周期的阶段绑定在一起的,如果一个阶段没有绑定任何目标,则运行该阶段没有任何实质意义。
摘录一段官方的描述:
A Build lifecycle is Made Up of build Phases.
A build phase represents a stage in the lifecycle.
A Build Phase is Made Up of Goals.
Maven 内置三种生命周期:
内置 Lifecycle | 描述 | 内置 Phase 数量 |
---|---|---|
clean |
Project cleaning | 3 个 |
default |
Project deployment | 23 个 |
site |
Creation of project’s site documentation | 4 个 |
阶段(Phase)
Phase 虽然很多,但其中带连字符 (pre-*
, post-*
, or process-*
) 的 Phase 通常不会在命令行中直接使用。
那么有哪些常用的 Phase?
Phase | 描述 |
---|---|
clean |
remove all files generated by the previous build. |
complie |
compile the source code of the project |
test |
test the compiled source code using a suitable unit testing framework. These tests should not require the code be packaged or deployed. |
package |
take the compiled code and package it in its distributable format, such as a JAR. |
install |
install the package into the local repository, for use as a dependency in other projects locally |
deploy |
done in the build environment, copies the final package to the remote repository for sharing with other developers and projects. |
如何运行一个 Phase?使用命令 mvn phase
。运行时,首先由该 phase 确定对应的生命周期。然后从生命周期的第一个 Phase 开始,按顺序运行到该 phase。
如果要跳过测试,参数如下:mvn package -DskipTests
目标(Goal)
Phase 是一个逻辑概念,本身并不包含任何构建信息,运行 Phase 时,只是运行绑定到该 Phase 的 Goal。
Plugin 是一个物理概念,安装了 Plugin 才会有相应的一些 Goal。而每个 Goal 代表了该 Plugin 的一种能力。如果要直接运行一个 Goal,可以使用 mvn <plugin-prefix>:<goal>
。其中 plugin-prefix 的约定格式如下:
约定格式 | 描述 |
---|---|
maven-${prefix}-plugin |
Apache Maven 团队维护的官方插件。例如 maven-compiler-plugin ,命令:mvn dependency:list |
${prefix}-maven-plugin |
其它插件。例如 spring-boot-maven-plugin ,命令:mvn spring-boot:run |
参考
http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html