介绍
在Maven中包含两类插件:build、reporting,很显然,前者与项目构建有关,后者与项目报告有关。
build plugins
在build时、build后执行,配置:build元素。reporting plugins
在生成站点时执行,配置:reporting元素。
所有的插件的配置至少要包含:groupId,artifactId 和 version,恰好这三个元素为大家所熟悉,这里不再赘述。
configuration
这是build、reporting的公共元素。
先了解一下Mojo是什么:
每个插件都含有编写目标,比如clean、compile,Maven称之为Mojo。例子:假设我们有这样一个Mojo,它要查询一个URL地址,并且需要指定timeout及一些options:
/**
* @goal query
*/
public class MyQueryMojo
extends AbstractMojo
{
/**
* @parameter expression="${query.url}"
*/
private String url;
/**
* @parameter default-value="60"
*/
private int timeout;
/**
* @parameter
*/
private String[] options;
public void execute()
throws MojoExecutionException
{
...
}
}
针对这个Mojo配置POM,如下:
<project>
...
<build>
<plugins>
<plugin>
<artifactId>maven-myquery-plugin</artifactId>
<version>1.0</version>
<configuration>
<url>http://www.foobar.com/query</url>
<timeout>10</timeout>
<options>
<option>one</option>
<option>two</option>
<option>three</option>
</options>
</configuration>
</plugin>
</plugins>
</build>
...
</project>
很显然,configuration中的元素都与Mojo中的字段匹配,Maven的配置机制让人很简单的想到了使用XML配置来映射Java对象,所以上面的例子中,元素url映射到了url字段,timeout元素映射到了timeout字段,映射机制通过检查字段的类型来决定是否是一个可行的映射。对于Mojo而言,可以使用CLI(命令行)直接执行,所需要的参数可以通过系统属性来指定而取代通过configuration元素进行配置,对于那些参数,在插件文档中会描述系统参数由怎样的一个表达式来表示,在上面的例子中,url的表达式就是${query.url},意味着它的值可以由系统属性query.url来表示:
mvn myquery:query -Dquery.url=http://maven.apache.org
注意,系统属性名不一定非要与Mojo的参数名一样,但这是一个比较普遍的做法。对于插件的系统变量,应该采用一些字首来避免与其他插件的系统变量冲突,甚至有些插件系统变量名与参数名毫不相关,所以查看插件文档是非常必要的。
参数配置
映射简单对象
<configuration>
<myString>a string</myS