maven-plugin的理解与定义

这篇具有很好参考价值的文章主要介绍了maven-plugin的理解与定义。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、plugin的定义与配置


1. 自定义plugin

参考: 官网

  • 基本定义

其中@Mojo.name为goal的名称,@Parameterconfiguraiton中配置的定义

@Mojo( name = "query" ) //定义goal的名称
public class MyQueryMojo
    extends AbstractMojo
{
    @Parameter(property = "query.url", required = true)
    private String url;
 
    @Parameter(property = "timeout", required = false, defaultValue = "50")
    private int timeout;
 
    @Parameter(property = "options")
    private String[] options;
 
    public void execute()
        throws MojoExecutionException
    {
        ...
    }
}

使用插件

<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>

  • 定义配置项类型转换

配置值到具体类型配置项的转换

Parameter Class Conversion from String
Boolean Boolean.valueOf(String)
Byte Byte.decode(String)
Character Character.valueOf(char) of the first character in the given string
Class Class.forName(String)
java.util.Date SimpleDateFormat.parse(String) for the following patterns: yyyy-MM-dd hh:mm:ss.S a, yyyy-MM-dd hh:mm:ssa, yyyy-MM-dd HH:mm:ss.S or yyyy-MM-dd HH:mm:ss
Double Double.valueOf(String)
Enum Enum.valueOf(String)
java.io.File new File(String) with the file separators normalized to File.separatorChar. In case the file is relative, is is made absolute by prefixing it with the project’s base directory.
Float Float.valueOf(String)
Integer Integer.decode(String)
Long Long.decode(String)
Short Short.decode(String)
String n/a
StringBuffer new StringBuffer(String)
StringBuilder new StringBuilder(String)
java.net.URI new URI(String)
java.net.URL new URL(String)

  • 配置项为复杂对象时

通过xml标签的缩进来体现

<project>
...
<configuration>
  <person>
    <firstName>Jason</firstName>
    <lastName>van Zyl</lastName>
  </person>
</configuration>
...
</project>

  • 配置项为接口

具体通过实现类体现

<project>
...
<configuration>
  <person implementation="com.mycompany.mojo.query.SuperPerson">
    <firstName>Jason</firstName>
    <lastName>van Zyl</lastName>
  </person>
</configuration>
...
</project>

  • 配置项为集合
public class MyAnimalMojo
    extends AbstractMojo
{
    @Parameter(property = "animals")
    private List<String> animals;
 
    public void execute()
        throws MojoExecutionException
    {
        ...
    }
}
<project>
  ...
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-myanimal-plugin</artifactId>
        <version>1.0</version>
        <configuration>
          <animals>
            <animal>cat</animal>
            <animal>dog</animal>
            <animal>aardvark</animal>
          </animals>
        </configuration>
      </plugin>
    </plugins>
  </build>
  ...
</project>
<project>
  ...
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-myanimal-plugin</artifactId>
        <version>1.0</version>
        <configuration>
          <animals>cat,dog,aardvark</animals>
        </configuration>
      </plugin>
    </plugins>
  </build>
  ...
</project>

  • 配置项为map
...
		@Parameter
    private Map<String,String> myMap;
...
<project>
...
  <configuration>
    <myMap>
      <key1>value1</key1>
      <key2>value2</key2>
    </myMap>
  </configuration>
...
</project>

  • 配置项为properties
...
    @Parameter
    private Properties myProperties;  
...
<project>
...
  <configuration>
    <myProperties>
      <property>
        <name>propertyName1</name>
        <value>propertyValue1</value>
      </property>
      <property>
        <name>propertyName2</name>
        <value>propertyValue2</value>
      </property>
    </myProperties>
  </configuration>
...
</project>

2. 绑定goal到maven执行周期


  • 绑定到单个goal

注意: 第二个goal未绑定(除非定义时有默认的绑定周期)

<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>

  • 绑定到多个周期
<project>
  ...
  <build>
    <plugins>
      <plugin>
        ...
        <executions>
          <execution>
            <id>execution1</id>
            <phase>test</phase>
            ...
          </execution>
          <execution>
            <id>execution2</id>
            <phase>install</phase>
            <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>

3. 定义goal默认的maven周期

@Mojo( name = "query", defaultPhase = LifecyclePhase.PACKAGE )
public class MyBoundQueryMojo
    extends AbstractMojo
{
    @Parameter(property = "query.url", required = true)
    private String url;
 
    @Parameter(property = "timeout", required = false, defaultValue = "50")
    private int timeout;
 
    @Parameter(property = "options")
    private String[] options;
 
    public void execute()
        throws MojoExecutionException
    {
        ...
    }
}

也可以换绑到其他周期,原来的周期不再生效

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-myquery-plugin</artifactId>
        <version>1.0</version>
        <executions>
          <execution>
            <id>execution1</id>
            <phase>install</phase>
            <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>

4. 命令执行当前pom定义的execution

mvn myquery:query@execution1

5. plugin运行时采用最新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>

6. 插件配置不在子pom生效

默认是传播的,设置inherited=false即可

<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>

二、扩展


  • 插件使用方式推荐

父pom定义版本管理,子pom直接引用文章来源地址https://www.toymoban.com/news/detail-519738.html

<project>
  ...
  <build>
    <!-- To define the plugin version in your parent POM -->
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.3.1</version>
        </plugin>
        ...
      </plugins>
    </pluginManagement>
    <!-- To use the plugin goals in your POM or parent POM -->
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
      </plugin>
      ...
    </plugins>
  </build>
  ...
</project>

  • maven的默认周期对应的goal
validate
initialize
generate-sources
process-sources
generate-resources
process-resources
compile
process-classes
generate-test-sources
process-test-sources
generate-test-resources
process-test-resources
test-compile
process-test-classes
test
prepare-package
package
pre-integration-test
integration-test
post-integration-test
verify
install
deploy
  • mvn命令总结
  1. mvn命令带上-U表示强制去远程拉取依赖包(避免拿到的SNAPSHOT包是老的)
  2. 如果module不需要deploy到仓库,可以配置skip为true
 <plugin>
               <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-deploy-plugin</artifactId>
               <configuration>
                   <skip>true</skip>
              </configuration>
</plugin>
  1. 多线程构建
    mvn -T 4 或 mvn -T 1c (c表示机器的cpu核数)
  2. 显示构建详情及异常
    mvn -X -e
  3. 仅构建指定的module
    mvn --pl artifacId1,artifacId2
  4. 指定profile
    mvn -Pdev
  5. offline模式
    mvn -o
  6. 仅构建指定的module及其依赖的mudule
    mvn -am artifacId1,artifacId2
  7. 指定testSource/source等目录
<build>  
   <sourceDirectory>src/java</sourceDirectory>    
   <testSourceDirectory>src/test</testSourceDirectory>  
   <outputDirectory>output/classes</outputDirectory>  
   <testOutputDirectory>output/test-classes</testOutputDirectory>  
   <directory>target/jar</directory>  
   </build>

到了这里,关于maven-plugin的理解与定义的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • IDEA遇到Plugin ‘org.apache.maven.plugins:maven-compiler-plugin:3.8.1‘ not found报错

    我的依赖报错很多,下面是我解决的过程~ 我的maven是3.9的版本,Java是17版本,上网查了一下是兼容的,但是IDEA自带的maven版本是3.8,所以我先修改了一下setting的配置 具体可看: 解决IDEA导入maven项目Plugin ‘org.apache.maven.pluginsmaven-compiler-plugin‘ not found问题_普通网友的博客-C

    2024年01月19日
    浏览(79)
  • 解决Cannot resolve plugin org.apache.maven.plugins:maven-jar-plugin:3.2.2报错问题

    项目的运行 总有猝不及防的错误o(╥﹏╥)o 今天在运行项目时,突然报错:显示Cannot resolve plugin org.apache.maven.plugins:maven-jar-plugin:3.2.2 按照提示,结合上网查的资料,感觉是maven仓库的问题,就去idea的Settings看了看设置,发现项目设置的Maven home directory和User settings file设置的不

    2024年02月15日
    浏览(57)
  • [遇到的问题-已解决]Cannot resolve plugin org.apache.maven.plugins:maven-compiler-plugin:3.1

    如上图所示,这是我解决好的,刚开始的时候爆红有这些:  我按照在网上查找的方法,一一试了。 首先, maven  安装的路径和和本地仓库的目录必须要保持一致 打开setting-Build,Excution,Deployment-Build Tools-Maven,将其修改一致( 我还是爆红 )    接着,在mavenapache-maven-3.5.4c

    2023年04月08日
    浏览(42)
  • 解决Idea中Cannot resolve plugin org.apache.maven.plugins:maven-clean-plugin:3.2.0配置问题

    报错信息为: Cannot resolve plugin org.apache.maven.plugins:maven-clean-plugin:3.2.0 主要原因是因为maven没有加载这个 链接: https://blog.51cto.com/u_15242250/2852986

    2024年02月16日
    浏览(58)
  • Idea的maven依赖一直报错:Cannot resolve plugin org.apache.maven.plugins

            报这个错基本上就是maven依赖出现了问题,要么是写错,要么是下载时网络出现问题导致下载的文件不完整出现失败,一般有以下几种解决方案。 1)镜像文件配置错误        Rx: 修改本地仓库位置下的settings.xml文件,将正确的镜像文件加载到 mirrors 标签中,如

    2024年02月19日
    浏览(59)
  • Failed to execute goal org.apache.maven.plugins:maven-resources-plugin

    1.Failed to execute goal org.apache.maven.plugins:maven-resources-plugin 原因是 maven启动器版本高了 2.Internal Error occurred. org.junit.platform.commons.JUnitException: TestEngine with ID ‘junit-jupiter’ failed to discover tests at org.junit.platform.launcher.core.EngineDiscoveryOrchestrator.discoverEngineRoot(EngineDiscoveryOrchestrator.java:

    2024年02月02日
    浏览(60)
  • Maven报错:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile之解决方法

            小编在使用maven工具进行项目编译时,报出了下面的错误: 方法一: 1、找到settings ---Build,Excution,Deployment --- Compiler---java compiler :  2、可能报错的地方:Project Structure中 ,  project、moudle和SDKs都要检查: 修改完成之后重新进行 compiler,显示成功,最重要的就是

    2024年02月11日
    浏览(60)
  • idea编译maven项目报错:Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.3.1

    Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.3.1报错原因是maven版本过高导致。 笔者idea 2022.3版本,jdk1.8,maven用的3.9,在编译的时候,报上面这个错; 项目中maven-plugin版本不匹配,可以调整自己的本地maven版本解决此问题。我是把自己的maven版本降低到3.8.1,编译通

    2024年02月08日
    浏览(64)
  • maven-surefire-plugin

    maven-surefire-plugin Surefire 插件在test构建生命周期阶段用于执行应用程序的单元测试。 maven-surefire-plugin官网 (opens new window) 如果你执行过mvn test或者执行其他maven命令时跑了测试用例,你就已经用过maven-surefire-plugin了。 maven-surefire-plugin是maven里执行测试用例的插件,不显示配置就

    2024年01月18日
    浏览(31)
  • Idea 中编译maven项目报错:[ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.3

    编译报错如下: com.google.inject.ProvisionException: Unable to provision, see the following errors: 1) No implementation for MavenResourcesFiltering was bound.   while locating ResourcesMojo 1 error ====================== Full classname legend: ====================== MavenResourcesFiltering: \\\"org.apache.maven.shared.filtering.MavenResourcesFiltering\\\"

    2024年02月11日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包