Maven学习(三)之插件

1. Maven插件是什么?

Maven是一个项目管理工具,这是我们之间知道的,那么Maven是如何实现的呢,其实本质就是通过插件,一系列的插件,其实Maven的核心是插件执行框架。

Maven is - at its heart - a plugin execution framework

Maven插件分为两类:

  1. Build plugins, 构建插件,在构建中执行,被配置在pom.xml文档里面的build元素中。
  2. 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>

这里简单介绍上面一个属性

  1. groupId、artifactId、version 是用于定位插件的坐标,可以由父类 pluginManagement读取,是必须的参数
  2. executions 执行,可配置多个。每一个 id 都是唯一的,这也是plugin执行的核心。
  3. configuration 配置 一般映射插件里面的参数。例如参数里面有name, 那么相应的在configration里面可以配置zhangsan, 即可映射上。
  4. phase 阶段。一般对应Maven生命周期的阶段,例如 validate、compile、test、verify、package、install、deploy等,如果配置了阶段,那么插件将在这个阶段执行。
  5. goal 对应 插件@Mojo的name属性。一般情况下 插件会会优先执行的phase配置,在生命周期特定阶段。例如 test, 那么就在test阶段执行该插件,此时不管goal配置什么。如果phase未配置,那么就会执行goal了。

3. 常用的Maven插件

常用的maven插件,在Maven官网中也有介绍,这里主要以 build plugin 为例。

  1. clean 插件,用于在构建后清除
  2. compiler插件 编译java源码
  3. install 插件 将已经构建的artifact 安装到本地仓库
  4. deploy 插件 将已经构建的插件部署到远程仓库
  5. jar 插件 将当前项目构建成一个jar
  6. 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区别即可