Maven学习(三)之插件
1. Maven插件是什么?
Maven是一个项目管理工具,这是我们之间知道的,那么Maven是如何实现的呢,其实本质就是通过插件,一系列的插件,其实Maven的核心是插件执行框架。
Maven is - at its heart - a plugin execution framework
Maven插件分为两类:
- Build plugins, 构建插件,在构建中执行,被配置在pom.xml文档里面的build元素中。
- reporting plugins. 报告插件,在站点site生成的时候执行,被配置在pom.xml文档里面的reporting元素中。
目前接触最多的是构建插件(build plugin),这是本文重点需要说明的。
2. Maven插件配置
这里以build plugin为例。
<build>
<plugins>
<!-- 这是一个plugin的配置 -->
<plugin>
<!-- 这是plugin坐标配置 是必要配置 -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.2</version>
<!-- 执行环境配置 -->
<executions>
<!-- execution配置 -->
<excution>
<id>唯一标识</id>
<phase>阶段 对应生命周期 例如 test</phase>
<goals>
<goal>对应插件注解name</goal>
</goals>
<configuration>
<!-- 插件自定义配置 用于参数映射 -->
</configuration>
</excution>
</executions>
</plugin>
</plugins>
</build>
这里简单介绍上面一个属性
- groupId、artifactId、version 是用于定位插件的坐标,可以由父类 pluginManagement读取,是必须的参数
- executions 执行,可配置多个。每一个 id 都是唯一的,这也是plugin执行的核心。
- configuration 配置 一般映射插件里面的参数。例如参数里面有name, 那么相应的在configration里面可以配置zhangsan, 即可映射上。
- phase 阶段。一般对应Maven生命周期的阶段,例如 validate、compile、test、verify、package、install、deploy等,如果配置了阶段,那么插件将在这个阶段执行。
- goal 对应 插件@Mojo的name属性。一般情况下 插件会会优先执行的phase配置,在生命周期特定阶段。例如 test, 那么就在test阶段执行该插件,此时不管goal配置什么。如果phase未配置,那么就会执行goal了。
3. 常用的Maven插件
常用的maven插件,在Maven官网中也有介绍,这里主要以 build plugin 为例。
- clean 插件,用于在构建后清除
- compiler插件 编译java源码
- install 插件 将已经构建的artifact 安装到本地仓库
- deploy 插件 将已经构建的插件部署到远程仓库
- jar 插件 将当前项目构建成一个jar
- war 插件 将当前项目 构建成一个war
这些插件 可以执行使用 mvn命令执行,例如 mvn clean
4. 自定义Maven插件
上面说了很多 都是Maven固有的插件,其实Maven本身也支持插件扩展,即自定义插件。
自定义插件分为两部分。编写插件、使用插件
4.1 编写插件
建立一个maven项目。pom.xml中 引用插件相关依赖 如下:
注意packaging必须为maven-plugin
<modelVersion>4.0.0</modelVersion>
<groupId>com.plugin</groupId>
<artifactId>say-hi-plugin</artifactId>
<version>1.0.0</version>
<name>say-hi-plugin</name>
<description>maven custom plugin</description>
<packaging>maven-plugin</packaging>
<properties>
</properties>
<dependencies>
<!-- 插件api -->
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>3.3.9</version>
</dependency>
<!-- 插件注解 -->
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
<version>3.2</version>
<scope>provided</scope>
</dependency>
</dependencies>
继承基础类 AbstractMojo, 并实现 execute() 方法
例如
@Mojo(name = "say")
public class HiPlugin extends AbstractMojo {
public void execute() throws MojoExecutionException, MojoFailureException {
getLog().info("hello man, this is a custom plugin for you ");
}
}
最后一步,将它安装到本地仓库 供其他项目使用。
mvn install
4.2 使用自定义plugin
主要就是引入
<build>
<plugins>
<plugin>
<groupId>com.plugin</groupId>
<artifactId>say-hi-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<goals>
<goal>say</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
此时可以使用命令测试命令测试一下. 就可以打印出execute 那句话
mvn say-hi:say
5. 个人总结
本文主要讲述了Maven插件的相关知识,以及如何自定义一个maven插件。最后主要注意插件中 phase和goal区别即可