java自定义maven插件_Maven自定义插件的实现
为了快速学习自定义 Maven 插件的过程,接下来将实现一个简单的 Hello Maven 插件,功能很简单:输出 Hello World 插件。具体步骤和操作如下。
创建 Maven 新项目,选择 maven-archetype-plugin 项目向导,如图 1 所示。
图 1 选择Archetype
单击 Next 按钮,进入设置 Maven 插件参数界面,输入要创建的插件的 groupId、artifactId 和版本,还有包名,如图 2 所示。
图 2 输入坐标
单击 Finish 按钮,Archetype 插件会自动创建好一个 Maven 插件项目。因为现在用的 Maven 是 3.x 版本的,所以有必要调整 Maven 插件项目必须依赖的 maven-plugin-api 的版本:从 2.x 改成 3.x。这里用的是 3.3.9 版本。样例项目中的 pom 配置如下,注意粗体标识部分。
<?xml version="1.0" encoding="UTF-8"?> 4.0.0cn.com.mvn.pluginMvn.Hello.Plugin0.0.1-SNAPSHOTmaven-pluginMvn.Hello.Plugin Maven Pluginhttp://maven.apache.orgUTF-8org.apache.mavenmaven-plugin-api3.3.9org.apache.maven.plugin-toolsmaven-plugin-annotations3.2providedorg.codehaus.plexusplexus-utils3.0.8junitjunit4.7testorg.apache.maven.pluginsmaven-plugin-plugin3.2Mvn.Hello.Plugintruemojo-descriptordescriptorhelp-goalhelpmojorun-itsorg.apache.maven.pluginsmaven-invoker-plugin1.7true${project.build.directory}/it*/pom.xmlverify${project.build.directory}/local-repo src/it/settings.xmlcleantest-compileintegration-testinstallintegration-testverify
到现在为止,基本上创建好了 Maven 插件项目。
在 cn.com.mvn.plugin.hello 包下,创建 Java 类 HelloName,继承 AbstractMojo,并且在类上面使用 @goal 指定该 Mojo 的目标名称为 name,样例配置代码如下:
package cn.com.mvn.plugin.hello; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; /** * @goal name */ public class HelloName extends AbstractMojo { public void execute() throws MojoExecutionException, MojoFailureException { } }
在前面的代码基础上添加一个 name 属性,用来接收运行插件的时候传过来的 name 参数,并且使用 @parameter 将 name 属性标注成配置点,样例配置代码如下:
package cn.com.mvn.plugin.hello; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; /** * @goal name */ public class HelloName extends AbstractMojo { /** * @parameter expression="${name}" * @required * @readonly */ String name; public void execute() throws MojoExecutionException, MojoFailureException { } }
在 HelloName 类中的 execute() 方法中添加插件要实现的逻辑代码。这里的 HelloName 的功能很简单,只是打印问候,所以样例配置代码如下:
package cn.com.mvn.plugin.hello; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; /** * @goal name */ public class HelloName extends AbstractMojo { /** * @parameter expression="${name}" * @required * @readonly */ String name; public void execute() throws MojoExecutionException, MojoFailureException { System.out.println("Hello" + name); } }
这个插件的目的是打印对 name 的问候。如果 name 为空,或是空字符串,这样的问候就没什么意义了。用户就需要中止问候,并且以日志方式提示用户,样例配置代码如下:
package cn.com.mvn.plugin.hello; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; /** * @goal name */ public class HelloName extends AbstractMojo { /** * @parameter expression="${name}" * @required * @readonly */ String name; public void execute() throws MojoExecutionException, MojoFailureException { if (this.name == null || this.name.trim().equals("")) { // 异常处理 throw new MojoExecutionException("name参数必须设置有效的值"); } else { System.out.println("Hello" + name); // 日志处理 this.getLog().info("这是运行日志提示: 执行完问候"); } } }
到现在为止,HelloName Maven 插件的编写就完成了。要进行插件测试的话,还需要将自定义插件安装好,如果要共享给其他开发人员的话,还必须安装到私服或外面的中央仓库中。
运行 mvn install 就可以完成在本地仓库的安装,如果要安装私服或中央仓库,请参考《Apache基金会的Archiva服务器的搭建步骤》和《Maven私服的配置和使用》教程。
在命令行中输入如下命令。
Mvn cn.com.mvn.plugin:Mvn.Hello.Plugin:name -Dname=zhangsan
命令执行效果如下:
[INFO] ————————————————————————
[INFO] [INFO] — Mvn.Hello.Plugin:0.0.1-SNAPSHOT:name (default-cli) @ MvnDemoPlugin —
Hello lisi
[INFO] 这是运行日志提示:执行完问候
[INFO] ————————————————————————
[INFO] BUILD SUCCESS
[INFO] ————————————————————————
[INFO] Total time: 1.139 s
[INFO] Finished at: 2017-01-08T11:55:48+08:00
[INFO] Final Memory: 8M/108M
[INFO] ————————————————————————
创建一个简单的 Maven 项目,在它的 pom 中添加 HelloName 插件如下:
cn.com.mvn.pluginMvn.Hello.Plugin0.0.1-SNAPSHOTnametestlisi
执行 mvn test,可以看到如下日志。
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] [INFO] — Mvn.Hello.Plugin:0.0.1-SNAPSHOT:name (default) @ MvnDemoPlugin —
Hello lisi
[INFO] 这是运行日志提示:执行完问候
[INFO] ————————————————————————
[INFO] BUILD SUCCESS
java自定义maven插件_Maven自定义插件的实现相关推荐
- 升级maven编译插件_maven进阶插件
父子项目都设置properties,子项目会覆盖父项目. 但是使用的jar包要覆盖全,比如logback有classic和core两个模块,之前只覆盖了classic模块,没有添加core的依赖.导致 ...
- maven 版本号插件_Maven内部版本号插件–用法示例
maven 版本号插件 假设我们需要向一些工件(jar,war等)添加内部版本号. 在这里,我想演示buildnumber-maven-plugin的用法. 这篇文章基于: http://mojo.c ...
- java自定义maven插件_自定义Maven插件
第一.自定义Maven插件概述 Mojo:Maven plain Old Java Object.每一个 Mojo 就是 Maven 中的一个执行目标(executable goal),而插件则是对单 ...
- java自定义maven插件_java – 自定义Maven插件托管和前缀解析
我已经编写了自己的自定义Maven插件并将其上传到我的Archiva服务器.它与指定的全名一起工作正常: mvn com.mjolnirr:maven-plugin:manifest 但是当我想通过前 ...
- java代码自动生成的插件_如何使用插件生成自定义Java 8代码
java代码自动生成的插件 大多数程序员讨厌的一件事就是编写样板代码. 无休止的时间花费在设置实体类和配置数据库连接上. 为了避免这种情况,您可以让Speedment Open Source之类的程序 ...
- 如何使用插件生成自定义Java 8代码
大多数程序员讨厌的一件事就是编写样板代码. 无休止的时间花费在设置实体类和配置数据库连接上. 为了避免这种情况,您可以让Speedment Open Source之类的程序为您生成所有这些代码. 这样 ...
- 自定义maven插件
文章目录 maven插件介绍 自定义插件 使用 运行 maven插件介绍 maven插件有很多的作用,maven插件简介 说个用的比较多的,就是jetty插件,通过配置jetty可以通过插件一键运行代 ...
- 自定义maven插件:自动生成API的word文档
继上次开发完Maven插件开发:根据库表生成实体类&根据实体类生成库表之后,博主对开发maven插件喜爱得一塌糊涂.这不,今天给大家带来了<自定义maven插件:自动生成API的word ...
- messageformat.format() 自定义参数名_DedeCMS的Java版mcms 第四季之一: 自定义插件
自定义mcms插件 包含自定义字典.自定义搜索.自定义模型.自定义表单.自定义页面等功能 依赖: Apache Maven <dependency><groupId>net.m ...
最新文章
- .Net Reactor 5脱壳教程
- [Tips]:SQL server 2005 Create Assembly Failed
- Vue之动态class写法总结
- Xamarin.Forms 中iOS通过URL Scheme判断应用是否安装
- vue取url路径传参_vue不通过路由直接获取url中参数的方法示例
- 企业域名更换操作系列4:下载旧域域信息配置
- Centos5.6 x86_64下安装DRBD+Heartbeat+NFS
- android 事件反拦截
- ios动态创建类Class
- hiredis中异步的实现小结
- Atitit mysql 存储kv 以及php js接口目录kv_mysql.js 1Set.php 1Get.php 2CREATE TABLE `cfg` ( `k`
- C语言题目:输入角度a,输出a的正弦值(sin a)
- oracle数据库查看建表语句,oracle 查看建表语句
- 3dmax:3dmax三维VR渲染设置(VR间接照明GI栏、【VR间接(全局)照明】发光贴图、光子贴图、BF算法、灯光贴图、灯光缓存)之详细攻略(切记收藏!)
- 右耳Python小作业--快递分拣
- VS2013漂亮字体
- 能够打开国内网络,比如百度微信,但是打不开外国网站,该怎么解决(主要是DNS的问题)...
- Box2d源码学习十三b2Collision之碰撞(下) 具体形状间的碰撞的实现
- UOS Deepin 安装 flatpak
- 软件开发工具有哪些?