一、创建Maven项目

首先创建一个Maven插件项目,可以手动或使用mvn archetype:create从原型创建。pom.xml配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?xml version="1.0" encoding="UTF-8"?>
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 
    <groupId>com.cdai.demo</groupId>
    <artifactId>hello-maven-plugin</artifactId>
    <version>1.0-SNAPSHOT</version>
    <modelVersion>4.0.0</modelVersion>
    <packaging>maven-plugin</packaging>
 
    <name>hello-maven-plugin</name>
    <url>http://maven.apache.org</url>
 
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
 
    <dependencies>
        <dependency>
            <groupId>org.apache.maven</groupId>
            <artifactId>maven-plugin-api</artifactId>
            <version>2.2.1</version>
        </dependency>
    </dependencies>
 
</project>

与普通的pom.xml没太多不同,要注意的两处是:
1)packaging类型为maven-plugin
2)需要依赖maven-plugin-api



二、开发Helloworld插件

Maven插件类需要继承AbstractMojo(Mojo即Maven Plain Old Java Object)。同时,
与普通Java类相比的特别之处是:在JavaDoc注释中使用注解对插件进行配置。具体插件代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package com.cdai.demo.maven;
 
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
 
/**
 * Maven插件的Helloworld
 * User: cdai
 *
 * @goal info
 * @phase compile
 * @requiresProject false
 */
public class HelloMavenPlugin extends AbstractMojo {
 
    /**
     * @parameter expression="${greeting}" default-value="Helloworld!!!"
     */
    String greeting;
 
    @Override
    public void execute() throws MojoExecutionException, MojoFailureException {
        getLog().info(greeting);
    }
 
}



三、安装运行插件

开发完成后,直接mvn install将插件安装到本地Repository库中后,就可以在命令行运行插件了。
运行命令为:mvn [groupId]:[artifactId]:[version]:[goal] -D[param]=[value]

例如上面开发的插件就可以执行:
     mvn com.cdai.demo:hello-maven-plugin:1.0-SNAPSHOT:info -Dgreeting=hi-maven





参考资料


最新文章

  1. javascript类型系统——布尔Boolean类型
  2. HDU2037 今年暑假不AC 【贪心】
  3. android 后台服务定时通知
  4. Windows Server Backup(2016) 备份
  5. 最大流 USTC1280
  6. Problem 10: Summation of primes
  7. [SHOI2015]超能粒子炮&#183;改
  8. linux c使用socket进行http 通信,并接收任意大小的http响应(三)
  9. 01-时间复杂度、对数器(python)、冒泡、选择、递归实质、归并、小和问题、逆序对、mid
  10. C# to il 9 Properties and Indexers(属性和索引器)
  11. tcp server
  12. Redis集合操作
  13. SQL Server设置登录验证模式
  14. Flume定时启动任务 防止挂掉
  15. 【Leetcode】【Easy】Isomorphic Strings
  16. Eclipse安装Sonarlint插件
  17. MVC 实现表格数据导出Excel(NPOI方式)
  18. Android基础入门教程
  19. Handsontable 的数据保存(增删改查+导出excel)
  20. P3628 [APIO2010]特别行动队

热门文章

  1. poj2331 (IDA*)
  2. hdu 3016 dp+线段树
  3. 浅谈java中内置的观察者模式与动态代理的实现
  4. mysql的连接处理过程
  5. MFC程序设计小结
  6. 5-15 QQ帐户的申请与登陆 (25分) HASH
  7. JS的事件模型
  8. hasattr(),getattr(),setattr()的使用
  9. WMI远程启动软件(某个应用程序)
  10. jenkins部署.net平台自动化构建