Maven 插件
Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成。
Maven 实际上是一个依赖插件执行的框架,每个任务实际上是由插件完成。Maven 插件通常被用来:
(1)创建 jar 文件
(2)创建 war 文件
(3)编译代码文件
(4)代码单元测试
(5)创建工程文档
(6)创建工程报告
Maven生命周期
Maven 有以下三个标准的生命周期(注意,此处不是指的软件生命周期,后者是软件的产生直到报废或停止使用的生命周期):
1、clean:项目清理。主要用于清理上一次构建产生的文件,可以理解为删除 target 目录。
2、default(或 build):项目构建。主要阶段包含:
process-resources 默认处理src/test/resources/下的文件,将其输出到测试的classpath目录中
compile 编译src/main/java下的java文件,产生对应的class
process-test-resources 默认处理src/test/resources/下的文件,将其输出到测试的classpath目录中
test-compile 编译src/test/java下的java文件,产生对应的class
test 运行测试用例
package 打包构件,即生成对应的jar、war等
install将构件部署到本地仓库
deploy 部署构件到远程仓库
3、site:项目站点文档创建。
每个生命周期中都包含着一系列的阶段(phase)。这些 phase 就相当于 Maven 提供的统一的接口,这些 phase 的实现由 Maven 的插件来完成。
插件与生命周期绑定
上面我们提到,Maven 将所有项目的构建过程统一抽象成一套生命周期: 项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成 ...,几乎所有项目的构建都能映射到这一组生命周期上。但是,生命周期是抽象的,Maven的生命周期本身是不做任何实际工作, 任务执行均交由插件完成。其中每个构建步骤都可以绑定一个或多个插件的目标,而且 Maven 为大多数构建步骤都编写并绑定了默认插件。当用户有特殊需要的时候,也可以配置插件定制构建行为,甚至自己编写插件。
生命周期的阶段 phase 与插件的目标 goal 相互绑定,用以完成实际的构建任务。而对于插件本身,为了能够复用代码,它往往能够完成多个任务,这些功能聚集在一个插件里,每个功能就是一个目标。
例如:$ mvn compiler:compile。冒号前部分是插件前缀,后面部分是该插件目标,即: maven-compiler-plugin 的 compile目标。该目标绑定了 default 生命周期的 compile 阶段,从而能够实现项目编译的目的。
提醒: goal 是 Maven 中非常重要的概念。通常指的的 Maven 插件的功能。Maven 插件有多个功能则存在多个 goal。
调用Maven插件:Maven命令
上文已经说过,Maven 的所有任务都是通过插件来完成的,它本身只是一个空空如也的框架,不具备执行具体任务的能力。
调用 Maven 插件的某个功能需要执行 Maven 命令,其命令格式如下:
mvn [plugin-name]:[goal-name]
该命令的意思是:执行 plugin-name 插件的 goal-name 目标(或者称为动作)。
用户可以通过两种方式调用 Maven 插件目标:
第一种方式是将插件目标与生命周期阶段(lifecycle phase)绑定,这样用户在命令行只是输入生命周期阶段而已,例如 Maven 默认将 maven-compiler-plugin 的 compile 目标与 compile 生命周期阶段绑定,因此命令mvn compile 实际上是先定位到 compile 这一生命周期阶段,然后再根据绑定关系调用 maven-compiler-plugin 的 compile 目标。
第二种方式是直接在命令行指定要执行的插件目标,例如 mvn archetype:generate 就表示调用 maven-archetype-plugin 的 generate 目标,这种带冒号的调用方式与生命周期无关。