Maven是个很强大的构建项目的工具,日常中大部分Java项目都是通过Maven来构建的。在看开源项目或者从0到1构建一个项目时,总会在pom.xml里遇到build标签、phase标签、goal标签等,那么build、phase、goal都是什么意思呢?本文就来尝试尽量讲透它们。
开始之前说个总结性质的结论,让大家在脑子先有个概念:maven对构建(build)的过程进行了抽象和定义,这个过程被称为构建的生命周期(lifecycle)。生命周期(lifecycle)由多个阶段(phase)组成,每个阶段(phase)又会被一到多个goal绑定。goal是maven里定义任务的最小单元。
OK,那我们首先来说一下build lifecycle (build 生命周期)
当我们构建一个maven项目时,会根据pom.xml中的配置和mvn命令行选项执行一系列具体的任务。这些任务集合就组成了maven build lifecycle。
Maven内置了三种Build的生命周期:
- default: handles project build and deployment
- clean: handles project cleaning
- site: handles the creation of project site documentation
每一种build的生命周期都会经历一系列执行的阶段,这些阶段就是phases。举个例子,上面三种内置build中的default 的生命周期主要由以下phase组成:
- validate
- compile
- test
- package
- verify
- install
- deploy
这些build phases按顺序执行。