项目地址
完整的代码在 simple-maven-plugins 中
简单回顾 mvn 命令
在日常开发的过程中,我们经常会跟 maven 打交道。
在命令行输入 mvn --help
可以看到 mvn
命令的用法如下
指定 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:analyze
mvn dependency:tree
mvn 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个插件
网友评论