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