【maven】插件 相关

这里记录下如何编写一个简单的插件。

 

插件需要建立一个Mojo工程,idea里有对应的工程类型。

插件命名最好为xxx-maven-plugin,因为如果是这样的命名,使用插件时可以只用xxx。不要使用maven-xxx-plugin,因为这是官方插件命名方式。

pom文件:

1. packaging需要定义为maven-plugin

2.需要引入相关api的jar包。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.liyao</groupId>
  <artifactId>xtgyr-maven-plugin</artifactId>
  <packaging>maven-plugin</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>test-maven-plugin Maven Mojo</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>org.apache.maven</groupId>
      <artifactId>maven-plugin-api</artifactId>
      <version>3.5.2</version>
    </dependency>
    <dependency>
      <groupId>org.apache.maven.plugin-tools</groupId>
      <artifactId>maven-plugin-annotations</artifactId>
      <version>3.5</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

这里编写两个目标,一个带参数,一个不带。

@Mojo(name = "print")
public class MyMojo extends AbstractMojo
{
    public void execute()
        throws MojoExecutionException
    {
        getLog().info("hello ");
    }
}

所有插件目标都要对应一个AbstractMojo实现类,并且使用@Mojo注解(并不是唯一注解)。这个插件定义了一个print目标,最终会打印hello。

@Mojo(name = "printWithP")
public class MyMojo2 extends AbstractMojo
{
    @Parameter( property = "greeting.name", defaultValue = "Tom" )
    private String name;

    public void execute()
            throws MojoExecutionException
    {
        getLog().info("hello " + name);
    }
}

第二个插件加了一个参数name,注意这里的property是给命令行方式用的,实例变量名是给pom配置execution方式用的。可以指定默认值。

 

安装插件

maven为插件项目默认提供了compile,test,package,install,deploy五个目标。

本地的话只要mvn install就好。

 

使用

在另一个项目的pom中配置插件,最简单的就是:

 <plugin>
            <groupId>com.liyao</groupId>
            <artifactId>xtgyr-maven-plugin</artifactId>
            <version>1.0-SNAPSHOT</version>
</plugin>

这种方式需要我们手动运行插件。

mvn groupid:artifactid:version:goal。如果符合之前的命名规范,可以mvn prefix:goal。

这里mvn xtgyr:print即可。

如果传参,可以mvn xtgyr:printWithP -Dgreeting.name=ly

 

如果我们想在pom里绑定插件,需要加配置,比如:

  <plugin>
            <groupId>com.liyao</groupId>
            <artifactId>xtgyr-maven-plugin</artifactId>
            <version>1.0-SNAPSHOT</version>
            <executions>
            <execution>
            <id>123</id>
            <phase>compile</phase>
            <goals>
                <goal>printWithP</goal>
            </goals>
                <configuration>
                    <name>ff</name>
                </configuration>
            </execution>
                <execution>
                    <id>456</id>
                    <phase>compile</phase>
                    <goals>
                        <goal>print</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <id>copy-dependencies</id>
                    <phase>prepare-package</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${project.build.directory}/lib</outputDirectory>
                        <overWriteReleases>false</overWriteReleases>
                        <overWriteSnapshots>false</overWriteSnapshots>
                        <overWriteIfNewer>true</overWriteIfNewer>
                    </configuration>
                </execution>
            </executions>
        </plugin>

绑定在了compile周期,直接mvn compile即可。同时分别配置了两个goal。

这里顺便记录下插件的配置。

参数:一般情况,通用的不变的参数放在pom文件中定义。对于可变的可选的使用命令行方式,比方说test插件的skip。

目标:一个插件的不同目标通常需要配置多个execution项目。每一个都定义自己的id,phase和goal。如果参数也不同,就把configuration配置在execution内部,如果是插件级别共享,就放在plugin下,每一个execution都共享。

优先级:只要是通过mvn xxx:goal方式运行,就只看命令行传入的参数,即使pom配置了也不用;如果是按照绑定生命周期的方式,pom文件配置的参数优先级更高,只有pom没有配置,才会用命令行的。

 

参考:

http://ifeve.com/maven-java-pluging/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值