Maven的插件分如下两种:
- build plugins:该插件在项目构建阶段执行,它们都在
标签中设置。 - reporting plugins : 该插件在网站生成期间执行,他们都在
标签中设置。
所有的插件至少需要三个属性:groupId, artifactId 和 version。
Configuration
Maven的插件不管是上面的build还是reporting都可以通过
Mojo
/**
* @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
{
...
}
}
通过你的POM设置configuration映射url, timeout 和 options属性值到你的Mojo
<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>
Configuring 参数
映射简单类型,比如Boolean或Integer,非常简单。类似于以下内容:
...
<configuration>
<myString>a string</myString>
<myBoolean>true</myBoolean>
<myInteger>10</myInteger>
<myDouble>1.0</myDouble>
<myFile>c:\temp</myFile>
<myURL>http://maven.apache.org</myURL>
</configuration>
...
映射一个复杂的对象,可以查看以下示例,映射一个Person对象。
...
<configuration>
<person>
<firstName>Jason</firstName>
<lastName>van Zyl</lastName>
</person>
</configuration>
...
映射一个复杂的对象,需要满足以下规则:
- 必须要有一个专有的字段与正在映射的对象名称对应。如上例的person标签对应一个Mojo的person对象。
- 实例化的对象必须与Mojo对象位于同一个包中,那么映射机制将会 将person第一个字母大写去Mojo包中寻找一个Person对象。
- 如果对象和Moji不在同一个包中可以使用implementation属性指定。
通过implementation属性指定对象所在的包。
...
<configuration>
<person implementation="com.mycompany.mojo.query.SuperPerson">
<firstName>Jason</firstName>
<lastName>van Zyl</lastName>
</person>
</configuration>
...
映射一个List集合,比如说:privateList animals
...
<configuration>
<animals>
<animal>cat</animal>
<animal>dog</animal>
<animal>aardvark</animal>
</animals>
</configuration>
...
映射一个Map集合,比如说:private Map myMap
...
<configuration>
<myMap>
<key1>value1</key1>
<key2>value2</key2>
</myMap>
</configuration>
...
映射一个properties,比如说:privateProperties myProperties
...
<configuration>
<myProperties>
<property>
<name>propertyName1</name>
<value>propertyValue1</value>
<property>
<property>
<name>propertyName2</name>
<value>propertyValue2</value>
<property>
</myProperties>
</configuration>
...
配置 bulid 插件
使用 executions 标签
除了使用configuration标签配置Mojo属性,还可以使用executions标签,示例如下:
<project>
...
<build>
<plugins>
<plugin>
<artifactId>maven-myquery-plugin</artifactId>
<version>1.0</version>
<executions>
<execution>
<id>execution1</id>
<phase>test</phase>
<configuration>
<url>http://www.foo.com/query</url>
<timeout>10</timeout>
<options>
<option>one</option>
<option>two</option>
<option>three</option>
</options>
</configuration>
<goals>
<goal>query</goal>
</goals>
</execution>
<execution>
<id>execution2</id>
<configuration>
<url>http://www.bar.com/query</url>
<timeout>15</timeout>
<options>
<option>four</option>
<option>five</option>
<option>six</option>
</options>
</configuration>
<goals>
<goal>query</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
...
</project>
第一个id为execution1的execution标签使用phase设置为测试阶段。而第二个id为execution2的execution没有指定phase标签,那么这个插件就是一个默认阶段。
使用 dependencies 标签
可以使用dependencies标签来修改以来的最新版本。如下示例:
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.2</version>
...
<dependencies>
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant</artifactId>
<version>1.7.1</version>
</dependency>
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant-launcher</artifactId>
<version>1.7.1</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
...
</project>
使用 inherited 标签
默认情况下插件的配置信息会传递给子POM,为了中断继承的传递性。可以使用inherited标签,如下示例,子POM中就不会继承该插件。
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.2</version>
<inherited>false</inherited>
...
</plugin>
</plugins>
</build>
...
</project>
配置 Reporting 插件
使用 reportSets 标签
这个标签可以指定Maven 执行mvn site 时只适用于指定的项目。如下示例只是用project team项目。
<project>
...
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>2.1.2</version>
<reportSets>
<reportSet>
<reports>
<report>project-team</report>
</reports>
</reportSet>
</reportSets>
</plugin>
</plugins>
</reporting>
...
</project>
注:使用
使用 inherited 标签
该标签和build的类似,用于中断继承的传递性的。如下示例,插件不会传递到子POM。
<project>
...
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>2.1.2</version>
<inherited>false</inherited>
</plugin>
</plugins>
</reporting>
...
</project>