Maven插件

来源:互联网 发布:android防淘宝评论 编辑:程序博客网 时间:2024/05/21 19:22

本文内容来自:http://maven.apache.org/

插件配置

Maven中,有两种插件:

  1. Build plugins:在构建的时候执行,在pom的build元素中配置
  2. Reporting plugins:在站点产生时执行,在reporting元素中配置

所有插件,最少都要声明三个信息:groupId, artifactId 和 version

通用配置

Maven插件通过configuration元素(plugin元素的子元素)来配置,它的子元素和其Mojo的成员变量或者setter方法相对应,元素名和成员变量相同。一个插件包含一个或多个Mojo,而一个Mojo和一个goal相对应,Mojo是一个继承了AbstractMojo的类。
如果通过命令行直接执行Mojo,参数一般通过系统属性来提供(在命令行中指定),在插件的文档中会列出系统属性对应的表达式

help goal

最近的插件开始包含一个help的goal,在使用命令行时可以用来描述该插件,使用方法如下:

mvn javadoc:help -Ddetail -Dgoal=javadoc

配置参数

1. 简单对象映射:这个非常简单,具体如下:

2.<configuration>3.  <myString>a string</myString>4.  <myBoolean>true</myBoolean>5.  <myInteger>10</myInteger>6.  <myDouble>1.0</myDouble>7.  <myFile>c:\temp</myFile>8.  <myURL>http://maven.apache.org</myURL>9.</configuration>

2. 复杂对象映射

如下配置一个Person对象:

...2.<configuration>3.  <person>4.    <firstName>Jason</firstName>5.    <lastName>van Zyl</lastName>6.  </person>7.</configuration>8....

复杂对象的映射原则如下:

  • 必须有一个私有成员变量和元素名相对应,所以上个例子中person元素必须和mojo的person成员变量相对应
  • 对象必须和pojo在同个包下被实例化,加载机制会把元素名的第一个字母大写并将其用来查找对象进行实例化
  • 如果要把对象实例化到其他包或者起个复杂的名字,我们可以使用implementation ,如下所示:
...2.<configuration>3.  <person implementation="com.mycompany.mojo.query.SuperPerson">4.    <firstName>Jason</firstName>5.    <lastName>van Zyl</lastName>6.  </person>7.</configuration>8....

3.集合映射

列表的映射如下:

1.<project>2.  ...3.  <build>4.    <plugins>5.      <plugin>6.        <artifactId>maven-myanimal-plugin</artifactId>7.        <version>1.0</version>8.        <configuration>9.          <animals>10.            <animal>cat</animal>11.            <animal>dog</animal>12.            <animal>aardvark</animal>13.          </animals>14.        </configuration>15.      </plugin>16.    </plugins>17.  </build>18.  ...19.</project>

4.Map映射

Map的参数设置如下:

  <configuration>3.    <myMap>4.      <key1>value1</key1>5.      <key2>value2</key2>6.    </myMap>7.  </configuration>

5.Properties映射

  <configuration>3.    <myProperties>4.      <property>5.        <name>propertyName1</name>6.        <value>propertyValue1</value>7.      <property>8.      <property>9.        <name>propertyName2</name>10.        <value>propertyValue2</value>11.      <property>12.    </myProperties>13.  </configuration>

配置Build插件

以下仅在build元素中配置build插件

executions标签

当mojo要参与一些lifecycle的phase时,常使用executions标签来配置。如下代码所示:

1.<project>2.  ...3.  <build>4.    <plugins>5.      <plugin>6.        <artifactId>maven-myquery-plugin</artifactId>7.        <version>1.0</version>8.        <executions>9.          <execution>10.            <id>execution1</id>11.            <phase>test</phase>12.            <configuration>13.              <url>http://www.foo.com/query</url>14.              <timeout>10</timeout>15.              <options>16.                <option>one</option>17.                <option>two</option>18.                <option>three</option>19.              </options>20.            </configuration>21.            <goals>22.              <goal>query</goal>23.            </goals>24.          </execution>25.          <execution>26.            <id>execution2</id>27.            <configuration>28.              <url>http://www.bar.com/query</url>29.              <timeout>15</timeout>30.              <options>31.                <option>four</option>32.                <option>five</option>33.                <option>six</option>34.              </options>35.            </configuration>36.            <goals>37.              <goal>query</goal>38.            </goals>39.          </execution>40.        </executions>41.      </plugin>42.    </plugins>43.  </build>44.  ...45.</project>

第一个id为”execution1“的execution 元素把其配置绑定到test phase上,第二个execution没有phase标签,goals可以绑定一个默认的phase,但如果goals没有绑定默认的phase,则它在build lifecycle中不会执行。一个pom中一个plugin的每个execution的id必须是唯一的,但继承该pom的execution id不需要是唯一的,所有id重复的execution 会被合并。
在executions里的配置不能使用命令行来调用,因为它们是被绑定到phase上的,但在maven3.3.1以后,可以使用以下方式来调用execution中的配置:

mvn myqyeryplugin:queryMojo@execution1

dependencies标签

可以在plugin中配置dependencies,通常用来使用最新版本的依赖。

inherited标签

默认情况下,plugin的配置会被继承到子pom中,要取消继承,可以使用以下配置:

<inherited>false</inherited>
原创粉丝点击