Maven 插件开发的简单实例

这里需要使用到两个 Maven 项目,Maven 插件是一个,而使用这个开发的插件是另外一个。

具体实例代码如下:
首先看一下 Maven Plugin 项目的整个目录结构:
Maven 插件开发的简单实例

//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…

Maven 插件开发的简单实例

在弹出的页面中的 Goals 框中输入 clean install 进行打包:
Maven 插件开发的简单实例

打包完成。

然后使用同样的方法,在上面的 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 项目:
这是一个空项目,大体结构如下:

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] ------------------------------------------------------------------------