专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

Apache Maven(五):插件

Maven的插件分如下两种:

  • build plugins:该插件在项目构建阶段执行,它们都在标签中设置。
  • reporting plugins : 该插件在网站生成期间执行,他们都在标签中设置。

所有的插件至少需要三个属性:groupId, artifactId 和 version。

Configuration

Maven的插件不管是上面的build还是reporting都可以通过标签,将标签的子标签映射或则设置Mojo字段。查下如下示例:

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>

文章永久链接:https://tech.souyunku.com/13816

未经允许不得转载:搜云库技术团队 » Apache Maven(五):插件

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们