Java开发Maven插件
来源:互联网 发布:淘宝网购物压缩袋 编辑:程序博客网 时间:2024/06/06 05:26
这里需要两个工程,一个是插件工程,另外一个是插件测试工程
首先介绍下插件工程:
新建一个web项目,名称为myMavenPlugin,pom文件对该工程的相关配置信息为(注意这是关于项目自身的信息):
<groupId>org.apache.maven.plugins</groupId> <artifactId>my-maven-plugin</artifactId> <version>1.0.1-SNAPSHOT</version> <packaging>maven-plugin</packaging> <name>my-maven-plugin</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties>
可以看到这个项目的groupId以及artifactId,重点是打包方式必须是maven-plugin
另外要注意:artifactId的格式必须是xxxx-maven-plugin的格式
接下来还需要在pom文件中添加开发maven插件需要的jar包:
<dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-plugin-api</artifactId> <version>3.0</version> </dependency> <dependency> <groupId>org.apache.maven.plugin-tools</groupId> <artifactId>maven-plugin-annotations</artifactId> <version>3.4</version> <scope>provided</scope> </dependency>
接下来就是我们的核心Mojo类了,代码如下:
package org.apache.maven.plugins;import org.apache.maven.plugin.AbstractMojo;import org.apache.maven.plugin.MojoExecutionException;import org.apache.maven.plugin.MojoFailureException;import org.apache.maven.plugins.annotations.Mojo;import org.apache.maven.plugins.annotations.Parameter;/** * Hello world! * */@Mojo(name = "hello")//Mojo的名称public class HelloMojo extends AbstractMojo {//Mojo的参数,可以在使用插件的项目中配置 @Parameter(property = "test.word.test", defaultValue = "nothing") private String word; //执行hello插件时候就执行execute方法 public void execute() throws MojoExecutionException, MojoFailureException { getLog().info("hello word."); getLog().info(this.word); }}
property参数支持引用用户在命令行中通过-D指定的系统属性。
这个类必须继承AbstractMojo,并实现execute方法,上面的@Mojo注解定义了这个Mojo的名称,类的属性word是将要从插件使用方传递过来的参数
当名称为hello的插件任务被执行的时候,需要传递word参数,插件就会执行execute方法,当然这里只是做了一些打印
当然,我们还可以新建一个名称为welcome的Mojo类
package org.apache.maven.plugins;import org.apache.maven.plugin.AbstractMojo;import org.apache.maven.plugin.MojoExecutionException;import org.apache.maven.plugin.MojoFailureException;import org.apache.maven.plugins.annotations.Mojo;import org.apache.maven.plugins.annotations.Parameter;/** * Hello world! * */@Mojo(name = "welcome")public class WelcomeMojo extends AbstractMojo {//Mojo的参数,可以在使用插件的项目中配置 @Parameter(property = "sentence", defaultValue = "nothing") private String sentence; public void execute() throws MojoExecutionException, MojoFailureException { getLog().info("welcome."); getLog().info(this.sentence); }}
然后说下测试插件的工程:
新建一个web工程,名称为MyMavenPluginTest,在pom文件中添加如下对于插件的配置:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>my-maven-plugin</artifactId> <version>1.0.1-SNAPSHOT</version> <!--配置执行这个插件的时间,即配置插件的生命周期--> <!--这里是配置在项目的compile编译器时执行插件的名称为hello的Mojo的execute方法--> <executions> <execution> <id>hello</id> <phase>compile</phase> <goals> <goal>hello</goal> </goals> <!--给插件Mojo传参数,word="i love you"--> <!--<configuration>--> <!--<word>i love you</word>--> <!--</configuration>--> </execution> <execution> <id>welcome</id> <phase>install</phase> <goals> <goal>welcome</goal> </goals> <!--<configuration>--> <!--<sentence>i hate you</sentence>--> <!--</configuration>--> </execution> </executions> <configuration> <word>i love you</word> <sentence>i hate you</sentence> </configuration> </plugin> </plugins> </build>
这里是对同一个插件配置了两个任务,但是注意,参数配置是在<configuration>标签中,我上述的configuration是在plugin标签下,这是对插件全局任务的配置,这个配置对my插件下的所有Mojo任务都有效,这种方式参数传递正常
但是如果要对插件的每个任务分别配置参数怎么办呢?网上说应该将configuration标签放在execution标签中,但是我这样配置发现根本就是传不进去,至今还没找到原因
下面就是在我的测试项目中执行插件,有两种方式执行:
1. 在idea的右侧点击“Maven Projects”, 在Plugins下可以看到刚配置的插件,名称为my,这个名称就是插件artifactId的前缀,my下可以看到两个任务
my:hello和my:welcome,双击就可以分别执行
2. 命令行执行mvn命令
#mvn my:hello
#mvn my:welcome
命令行方式执行,也可以通过-D来传参:
#mvn my:hello -Dtest.word.test=hahahahaha
但是如果已经在configuration标签中配置了参数,则configuration中的参数优先,如果configuration中没有配置参数,则-D指定的参数有效
注意Mojo类中属性的配置:
@Parameter(property = "test.word.test", defaultValue = "nothing")private String word;
property参数配置的值是在通过命令行执行mvn命令时用-D指定参数时使用的,具体说明如下
如果通过xml文件配置传参数,则是如下配置:
<configuration> <word>i love you</word></configuration>这里word标签名字只需要与Mojo类的属性(private String word)名称一致即可
如果通过命令行执行mvn命令,则可以通过-D指定参数,参数名称与上述property配置的值要一致(test.word.test),即为如下方式:
#mvn my:hello -Dtest.word.test=hahahahaha
- Java开发Maven插件
- maven插件开发
- maven 3 插件开发
- Maven插件开发
- Maven插件开发
- maven插件开发简介
- Maven插件开发
- Maven插件开发
- Maven插件开发
- maven 插件开发
- maven插件开发
- maven 自定义插件开发
- maven 自定义插件开发
- maven自定义插件开发
- Maven插件开发--Eclipse开发
- 开发自己的Maven插件
- maven插件开发(一)
- maven插件开发(二)
- Python学习笔记
- jquery提交整个form表单
- 算法学习——位运算
- 浅析机器学习中各种损失函数及其含义
- 1次演讲13次提到技术,马云在阿里巴巴年会上都说了什么?
- Java开发Maven插件
- 前端架构之路:Windows下安装Nodejs步骤
- GitHub的使用
- mvn testng idea
- 图片实现高斯玻璃效果
- python django-admin 创建project的问题
- 属性-字体(2)
- 图的前向星表示
- 机器学习第十五课(朴素贝叶斯,拉普拉斯修正,贝叶斯网络)