您的位置:首页 > 编程语言 > Java开发

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

2012-07-03 11:17 393 查看
前面三节已经能够开发并使用一个简单的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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息