前面三节已经能够开发并使用一个简单的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
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>
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