Maven 插件
maven 插件
maven 有以下三个标准的生命周期:
- clean:项目清理的处理
- default(或 build):项目部署的处理
- site:项目站点文档创建的处理
每个生命周期中都包含着一系列的阶段(phase)。这些 phase 就相当于 maven 提供的统一的接口,然后这些 phase 的实现由 maven 的插件来完成。
我们在输入 mvn 命令的时候 比如 mvn clean,clean 对应的就是 clean 生命周期中的 clean 阶段。但是 clean 的具体操作是由 maven-clean-plugin 来实现的。
所以说 maven 生命周期的每一个阶段的具体实现都是由 maven 插件实现的。
maven 实际上是一个依赖插件执行的框架,每个任务实际上是由插件完成。maven 插件通常被用来:
- 创建 jar 文件
- 创建 war 文件
- 编译代码文件
- 代码单元测试
- 创建工程文档
- 创建工程报告
插件通常提供了一个目标的集合,并且可以使用下面的语法执行:
<code>mvn [plugin-name]:[goal-name]</code>
例如,一个 java 工程可以使用 maven-compiler-plugin 的 compile-goal 编译,使用以下命令:
<code>mvn compiler:compile</code>
1. 插件类型:
maven 提供了下面两种类型的插件:
类型 | 描述 |
---|---|
build plugins | 在构建时执行,并在 pom.xml 的 元素中配置。 |
reporting plugins | 在网站生成过程中执行,并在 pom.xml 的 元素中配置。 |
下面是一些常用插件的列表:
插件 | 描述 |
---|---|
clean | 构建之后清理目标文件。删除目标目录。 |
compiler | 编译 java 源文件。 |
surefile | 运行 junit 单元测试。创建测试报告。 |
jar | 从当前工程中构建 jar 文件。 |
war | 从当前工程中构建 war 文件。 |
javadoc | 为工程生成 javadoc。 |
antrun | 从构建过程的任意一个阶段中运行一个 ant 任务的集合。 |
2. 插件范例
我们已经在我们的例子中大量使用了 maven-antrun-plugin 来输出数据到控制台上。让我们用一种更好的方式理解这部分内容,在 c:\mvn\project 目录下创建一个 pom.xml 文件。
<project xmlns="http://maven.apache.org/pom/4.0.0" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelversion>4.0.0</modelversion> <groupid>com.companyname.projectgroup</groupid> <artifactid>project</artifactid> <version>1.0</version> <build> <plugins> <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-antrun-plugin</artifactid> <version>1.1</version> <executions> <execution> <id>id.clean</id> <phase>clean</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>clean phase</echo> </tasks> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
接下来,打开命令终端跳转到 pom.xml 所在的目录,并执行下面的 mvn 命令。
mvn clean
maven 将开始处理并显示 clean 生命周期的 clean 阶段。
[info] scanning for projects... [info] ------------------------------------------------------------------ [info] building unnamed - com.companyname.projectgroup:project:jar:1.0 [info] task-segment: [post-clean] [info] ------------------------------------------------------------------ [info] [clean:clean {execution: default-clean}] [info] [antrun:run {execution: id.clean}] [info] executing tasks [echo] clean phase [info] executed tasks [info] ------------------------------------------------------------------ [info] build successful [info] ------------------------------------------------------------------ [info] total time: < 1 second [info] finished at: sat jul 07 13:38:59 ist 2012 [info] final memory: 4m/44m [info] ------------------------------------------------------------------
上面的例子展示了以下关键概念:
- 插件是在 pom.xml 中使用 plugins 元素定义的。
- 每个插件可以有多个目标。
- 你可以定义阶段,插件会使用它的 phase 元素开始处理。我们已经使用了 clean 阶段。
- 你可以通过绑定到插件的目标的方式来配置要执行的任务。我们已经绑定了 echo 任务到 maven-antrun-plugin 的 run 目标。
- 就是这样,maven 将处理剩下的事情。它将下载本地仓库中获取不到的插件,并开始处理。