Maven 插件开发的简单实例
这里需要使用到两个 Maven 项目,Maven 插件是一个,而使用这个开发的插件是另外一个。
具体实例代码如下:
首先看一下 Maven Plugin 项目的整个目录结构:
//HelloPlugin.java
package cn.com.hsl.myMavenPlugin;
import org.apache.maven.model.Build;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.project.MavenProject;
@Mojo(name = "helloPlugin")
public class HelloPlugin extends AbstractMojo {
/**
* 默认就有的参数
* 可以取得当前运行项目的一些情报
*/
@Parameter(defaultValue="${project}")
private MavenProject project;
/**
* 接收Plugin配置时的传参
*/
@Parameter(defaultValue= "${buildinfo.prefix}")
private String prefix;
public void execute() throws MojoExecutionException, MojoFailureException {
Build build = project.getBuild();
String outputDirectory = build.getOutputDirectory();
String sourceDirectory = build.getSourceDirectory();
String testOutputDeirctory = build.getTestOutputDirectory();
String testSourceDirctory = build.getTestSourceDirectory();
getLog().info("================");
getLog().info("Project build info:");
String[] infos = {outputDirectory, sourceDirectory, testOutputDeirctory, testSourceDirctory};
for (String info : infos) {
getLog().info("\t" + prefix + " " + info);
}
getLog().info("====================");
}
//使用如下命令可以在当前项目中测试,当前这个 Plugin是否可以正常运行
//cn.com.hsl:myMavenPlugin:0.0.1-SNAPSHOT:helloPlugin
}
<!-- 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>cn.com.hsl</groupId>
<artifactId>myMavenPlugin</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>maven-plugin</packaging>
<name>myMavenPlugin</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>3.5.0</version>
</dependency>
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
<version>3.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-project</artifactId>
<version>2.2.1</version>
</dependency>
</dependencies>
</project>
整个项目的简单示例代码就做好了,然后右键点击项目 > run as > Maven build…
在弹出的页面中的 Goals 框中输入 clean install 进行打包:
打包完成。
然后使用同样的方法,在上面的 Goals 配置中输入如下信息,可以测试当前 Plugin 是否可以正常运行:
cn.com.hsl:myMavenPlugin:0.0.1-SNAPSHOT:helloPlugin
若是显示如下结果,则表明是正常的:
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building myMavenPlugin 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- myMavenPlugin:0.0.1-SNAPSHOT:helloPlugin (default-cli) @ myMavenPlugin ---
[INFO] ================
[INFO] Project build info:
[INFO] null G:\Workspaces\myMavenPlugin\target\classes
[INFO] null G:\Workspaces\myMavenPlugin\src\main\java
[INFO] null G:\Workspaces\myMavenPlugin\target\test-classes
[INFO] null G:\Workspaces\myMavenPlugin\src\test\java
[INFO] ====================
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.457 s
[INFO] Finished at: 2019-02-20T22:29:41+08:00
[INFO] Final Memory: 7M/121M
[INFO] ------------------------------------------------------------------------
再看一下这个测试之前创建 plugin 的 Maven 项目:
这是一个空项目,大体结构如下:
pom.xml中的配置如下:
//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>cn.com.hsl</groupId>
<artifactId>useMyMavenPlugin</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>useMyMavenPlugin</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>cn.com.hsl</groupId>
<artifactId>myMavenPlugin</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 传参数 -->
<configuration>
<prefix>-------------</prefix>
</configuration>
<executions>
<execution>
<id>helloPluginUse</id>
<phase>clean</phase>
<goals>
<goal>helloPlugin</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
然后就可以启动测试了:
右键点击项目 > run as > Maven clean
输出结果如下:
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building useMyMavenPlugin 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ useMyMavenPlugin ---
[INFO] Deleting G:\Workspaces\useMyMavenPlugin\target
[INFO]
[INFO] --- myMavenPlugin:0.0.1-SNAPSHOT:helloPlugin (helloPluginUse) @ useMyMavenPlugin ---
[INFO] ================
[INFO] Project build info:
[INFO] ------------- G:\Workspaces\useMyMavenPlugin\target\classes
[INFO] ------------- G:\Workspaces\useMyMavenPlugin\src\main\java
[INFO] ------------- G:\Workspaces\useMyMavenPlugin\target\test-classes
[INFO] ------------- G:\Workspaces\useMyMavenPlugin\src\test\java
[INFO] ====================
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.562 s
[INFO] Finished at: 2019-02-20T22:34:38+08:00
[INFO] Final Memory: 7M/153M
[INFO] ------------------------------------------------------------------------