项目地址
完整的代码在 simple-maven-plugins 中
简单回顾 mvn 命令
在日常开发的过程中,我们经常会跟 maven 打交道。
在命令行输入 mvn --help 可以看到 mvn 命令的用法如下

mvn --help
指定 phase
先举几个与 phase 有关的例子
-
mvn clean指定了clean lifecycle中的clean phase -
mvn compile指定了default lifecycle中的compile phase -
mvn test指定了default lifecycle中的test phase
lifecycle 和 phase 之间的对应关系可以参考 Lifecycle Reference
指定 goal
再举几个和 goal 有关的例子
mvn dependency:analyzemvn dependency:treemvn dependency:list
这三个命令都是指定了 goal。
其中 dependency 是插件前缀(Introduction to Plugin Prefix Resolution
一文讲了一些插件前缀的内容,我个人理解,插件前缀就是插件的一个简短名称),
analyze, tree, list 是这个插件的三个 goal。
在命令行执行
mvn dependency:help
就能看到 maven-dependency-plugin 具体有哪些 goal。
maven 插件本质上是一些 jar包,在合适的时机,这些 jar 包中的代码会被执行。
我们可以写一些简单的插件来体验一下。
实战
Your First Mojo 讲述了如何写一个简单的 maven 插件。
我对这篇文章的理解是
-
maven插件中用了模版方法的设计模式(我们自己定义插件时,核心步骤是实现AbstractMojo类中的execute()方法) - 在
AbstractMojo的子类中可以通过调用getLog()方法,向终端输出相关信息 - 我们可以向
maven插件(包括自己写的maven插件)传递参数
文章中举的例子可以输出 Hello World。
我们可以再试试别的功能。
我一共写了 4 个简单的插件,它们的功能如下
- Hello World (相当于把 Your First Mojo 中的代码复制粘贴了一下)
a + b- 删除
project.build.directory目录(可以看做maven-clean-plugin中clean goal的超级低阶版) - 展示
project.build.directory目录下的所有class文件的名称
我创建了4个目录分别和这4个插件对应,具体如下
为了展示插件的运行效果,我创建了 simple-service。
可以在 simple-service 中执行这些插件的 goal。
该项目的 顶层 pom.xml 内容如下
<?xml version="1.0" encoding="UTF-8"?>
<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>org.example.simple</groupId>
<artifactId>simple-maven-plugins</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>simple-plus-plugin</module>
<module>simple-hello-plugin</module>
<module>simple-clean-plugin</module>
<module>simple-show-plugin</module>
<module>simple-service</module>
</modules>
</project>
整个项目的 java 代码量不到两百行,所以是一个比较小的项目。
下面分别介绍4个插件