17.4 Mojo参数
正如在代码清单17-2中所看到的那样,我们可以使用@parameter将Mojo的某个字段标注为可配置的参数,即Mojo参数。事实上几乎每个Mojo都有一个或者多个Mojo参数,通过配置这些参数,Maven用户可以自定义插件的行为。7.5.2节和7.5.3节就分别配置了maven-compiler-plugin和maven-antrun-plugin的Mojo参数。
Maven支持种类多样的Mojo参数,包括单值的boolean、int、float、String、Date、File和URL,多值的数组、Collection、Map、Properties等。
boolean(包括boolean和Boolean)
/**
*@parameter
*/
private boolean sampleBoolean
对应的配置如下:
<sampleBoolean>true</sampleBoolean>
int(包括Integer、long、Long、short、Short、byte、Byte)
/**
*@parameter
*/
private int sampleInt
对应的配置如下:
<sampleInt>8</sampleInt>
float(包括Float、double、Double)
/**
*@parameter
*/
private float sampleFloat
对应的配置如下:
<sampleFloat>8.8</sampleFloat>
String(包括StringBuffer、char、Character)
/**
*@parameter
*/
private String sampleString
对应的配置如下:
<sampleString>Hello World</sampleString>
Date(格式为yyyy-MM-dd HH:mm:ss.S a或者yyyy-MM-dd HH:mm:ssa)
/**
*@parameter
*/
private Date sampleDate
对应的配置如下:
<sampleDate>2010-06-06 3:14:55.1 PM</sampleDate>
或者
<sampleDate>2010-06-06 3:14:55PM</sampleDate>
File
/**
*@parameter
*/
private File sampleFile
对应的配置如下:
<sampleFile>c:\tmp</sampleFile>
URL
/**
*@parameter
*/
private URL sampleURL
对应的配置如下:
<sample=URL>http://www.juvenxu.com/</sampleURL>
数组
/**
*@parameter
*/
private String[]includes
对应的配置如下:
<includes>
<include>java</include>
<include>sql</include>
</includes>
Collection(任何实现Collection接口的类,如ArrayList和HashSet)
/**
*@parameter
*/
private List includes
对应的配置如下:
<includes>
<include>java</include>
<include>sql</include>
</includes>
Map
/**
*@parameter
*/
private Map sampleMap
对应的配置如下:
<sampleMap>
<key1>value1</key1>
<key2>value2</key2>
</sampleMap>
Properties
/**
*@parameter
*/
private Properties sampleProperties
对应的配置如下:
<sampleProperties>
<property>
<name>p_name_1</name>
<value>p_value_1</value>
</property>
<property>
<name>p_name_2</name>
<value>p_value_2</value>
</property>
</sampleProperties>
一个简单的@parameter标注就能让用户配置各种类型的Mojo字段,不过在此基础上,用户还能为@parameter标注提供一些额外的属性,进一步自定义Mojo参数。
@parameter alias=“<aliasName>”
使用alias,用户就可以为Mojo参数使用别名,当Mojo字段名称太长或者可读性不强时,这个别名就非常有用。例如:
/**
*@parameter alias="uid"
*/
private String uniqueIdentity
对应的配置如下:
<uid>juven</uid>
@parameter expression=“${aSystemProperty}”
使用系统属性表达式对Mojo参数进行赋值,这是非常有用的特性。配置了@parameter的expression之后,用户可以在命令行配置该Mojo参数。例如,maven-surefire-plugin的test目标有如下源码:
/**
*@parameter expression="${maven.test.skip}"
*/
private boolean skip;
用户可以在POM中配置skip参数,同时也可以直接在命令行使用-Dmaven.test.skip=true来跳过测试。如果Mojo参数没有提供expression,那就意味着该参数无法在命令行直接配置。还需要注意的是,Mojo参数的名称和expression名称不一定相同。
@parameter default-value=“aValue/${anExpression}”
如果用户没有配置该Mojo参数,就为其提供一个默认值。该值可以是一个简单字面量如“true”、“hello”或者“1.5”,也可以是一个表达式,以方便使用POM的某个元素。
例如,下面代码中的参数sampleBoolean默认值为true:
/**
*@parameter defaultValue="true"
*/
private boolean sampleBoolean
代码清单17-2中有如下代码:
/**
*@parameter expression="${project.build.sourceDirectory}"
*@required
*@readonly
*/
private File sourceDirectory;
表示默认使用POM元素<project><build><sourceDirectory>的值。
除了@parameter标注外,还看到可以为Mojo参数使用@readonly和@required标注。
@readonly
表示该Mojo参数是只读的,如果使用了该标注,用户就无法对其进行配置。通常在应用POM元素内容的时候,我们不希望用户干涉。代码清单17-2就是很好的例子。
@required
表示该Mojo参数是必须的,如果使用了该标注,但是用户没有配置该Mojo参数且其没有默认值,Maven就会报错。