开发自己的Maven插件之四:基本概念

前面三节已经能够开发并使用一个简单的Maven plugin。

本节停留一下,梳理一下基本概念。

1.用向导创建

mvn archetype:create -DgroupId=com.freebird -DartifactId=plugin-example1 -DarchetypeArtifactId=maven-archetype-mojo 

当然,懂得手动创建的原理仍然很重要。不要被便捷的工具屏蔽了底层的实现。


2.Mojo

一个Maven Plugin至少需要一个Mojo类,该类继承了AbstractMojo类,并实现了自己的execute方法


3.annotation

前面的例子中,Mojo类的注释里面可以包含@开始的annotation,描述该类支持的goal,当然还有更多。比如:

/**
 * Goal which touches a timestamp file.
 *
 * @goal touch
 * 
 * @phase process-sources
 */
public class MyMojo
    extends AbstractMojo

习惯了用Java5+的程序员可能很奇怪,为什么居然不直接用Java的Annotation,而用这种Java doc的annotation。下面的这篇文章可以满足你的心愿:

http://wiki.jfrog.org/confluence/display/OSS/Maven+Anno+Mojo

不过为了更好地理解plugin的设计,我的系列文章里面还是使用老旧的方式。


无论是老旧的Javadoc annotation还是现代的Java5+ annotation,它们都是为了在编译的时候产生descriptor,descriptor用来描述Mojo类的信息,descriptor会被写到

classes/META-INF/maven/plugin.xml文件里面,比如我的插件的plugin.xml文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<plugin>
  <name>plugin-example1</name>
  <description>A plugin for validating JavaScript files using jslint4java.</description>
  <groupId>org.freebird</groupId>
  <artifactId>plugin-example1</artifactId>
  <version>1.0-SNAPSHOT</version>
  <goalPrefix>example1</goalPrefix>
  <isolatedRealm>false</isolatedRealm>
  <inheritedByDefault>true</inheritedByDefault>
  <mojos>
    <mojo>
      <goal>sayhi</goal>
      <description></description>
      <requiresDirectInvocation>false</requiresDirectInvocation>
      <requiresProject>true</requiresProject>
      <requiresReports>false</requiresReports>
      <aggregator>false</aggregator>
      <requiresOnline>false</requiresOnline>
      <inheritedByDefault>true</inheritedByDefault>
      <implementation>org.freebird.pluginexample1.Example</implementation>
      <language>java</language>
      <instantiationStrategy>per-lookup</instantiationStrategy>
      <executionStrategy>once-per-session</executionStrategy>
      <threadSafe>false</threadSafe>
      <parameters/>
    </mojo>
  </mojos>
  <dependencies>
    <dependency>
      <groupId>org.apache.maven</groupId>
      <artifactId>maven-plugin-api</artifactId>
      <type>jar</type>
      <version>2.0</version>
    </dependency>
  </dependencies>
</plugin>

掌握了这个信息以后,我们用别的plugin,想了解它实现了多少个goal,可以通过两个途径:

1.到官方站点查看文档,顺便看看这个plugin的java doc

这种方式比较方便,但是有时候官方站点的文档比较老旧,而java doc分散在各个mojo类里面,看起来也不是一目了然

2.下载jar包,解压后,查看plugin.xml

比如:maven-plugin-plugin-3.0.jar包里面的plugin.xml就包含了xdoc,help,report,descriptor,updateRegistry,addPluginArtifactMetdata和helpmojo 7个goals.

这种方式看正在使用的某个版本的plugin比较方便。


javadoc annotation和descriptor的列表参考下面的文档:

http://maven.apache.org/developers/mojo-api-specification.html#The_Descriptor_and_Annotations



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值