编写Maven插件的提示

最近,我花了很多时间来编写或为Maven开发插件。 它们简单,有趣且有趣。
我以为我会分享一些技巧,使他们在编写时变得更轻松。

提示1:将任务与Mojo分开

最初,您将把mojo的所有代码放入mojo的类(即,扩展AbstractMojo的类)中。 而是考虑将任务分离出来,并为mojo提供最少的填充代码。 这将:

  • 使单元测试更加容易。
  • 意味着您可以轻松地与其他工具集成,例如Ant。
  • 使在mojo中转换简单数据类型变得更加容易,从而为您的任务转换更复杂的类型(例如,将字符串转换为文件)。
  • 将异常翻译与任务分开。

技巧2:考虑将配置外部化

通常,您可以使用POM中的元素配置插件。 对于简单的情况,这很好。 当您有大量的配置项目集或可能有多个配置文件的地方时,这将导致冗长且难以理解的POM。 您可以按照组装插件的示例进行操作,并具有一个用于放置config的标准化目录,例如src / main / myplugin / config-profile-1.xml。

提示3:将Mojo与相匹配

考虑一下您可能希望mojo进入哪个阶段。如果它正在做的事情应该拆分为跨阶段,则将mojo拆分并绑定到适当的阶段。 这将使测试和维护变得更加容易。

提示4:不要重复耗时的工作

您的mojo将在相同源代码和配置的较小变体上多次运行。 每次执行时,它都会做很多密集的工作吗? 我使用的Mojo每次运行文件时都将其解压缩,方法是将邮政编码更改为仅通过检查文件修改时间来刷新文件,该任务从一分钟的执行时间缩短到不到10秒。

提示5:计划测试

最初,您可能正在编写mojo并在要使用它的第一个项目上进行手动测试。 这将是一个漫长的测试周期,并导致不可靠的mojo。 将任务与mojo分开可以使测试任务变得容易,但是您需要对mojo进行一些烟雾测试。 用户往往很难注意到mojo中的错误,因为人们倾向于认为大多数mojo经过了良好的测试和可靠。

技巧6:考虑如何为Mojo提供文档和帮助

IDE和Maven在这里可能无济于事。 该配置项是什么意思? 我可以看个例子吗? 解决方案是提供一个“帮助” mojo和一个可选的Maven站点。 例如,如果您执行“ mvn assembly:help”或“ mvn surefire:help -Ddetail = true -Dgoal = test”,则会看到帮助。

参考:来自我们的JCG合作伙伴 Alex Collins的Java,* NIX,测试,性能,电子游戏技术等博客的编写Maven插件的提示 。

翻译自: https://www.javacodegeeks.com/2012/12/tips-for-writing-maven-plugins.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/370035.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle通信通道的文件结尾_ORA-03113:通信通道的文件结尾解决

提示ORA-03113:通信通道的文件结尾解决事情原由:oracle安装到win7下,以为都是直接sqlplus / as sysdba,使用数据库,但最近连接时频繁报错,提示ORA-03113:通信通道的文件结尾进程 ID &#xff1a…

Python_迭代器与生成器

迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式。。 迭代器是一个可以记住遍历的位置的对象。 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。 迭代器有两个基本的方法:iter()…

JSOI 2009 BZOJ 1444 有趣的游戏

题面 题目描述 小阳阳发明了一个有趣的游戏:有n个玩家,每一个玩家均有一个长度为 l 的字母序列,任何两个玩家的字母序列不同。共有m种不同的字母,所有的字母序列都由这m种字母构成,为了方便,我们取大写字母…

html语言dl与ul,HTML中DL、UL、OL用哪个比较好

大家好~ 我是一枚正直纯洁的苦逼程序员!!!!!ul,ol,dl标签是CSS网页布局中常用的列表元素。 列表将具有相似特征或先后顺序的内容按照从上到下的顺序排列起来。1.ul标签:无序列表始于…

slot多作用域 vue_详解Vue.js 作用域、slot用法(单个slot、具名slot)

作用域HEi免费资源网在介绍slot前&#xff0c;需要先知道一个概念&#xff1a;编译的作用域。比如父组件中有如下模板&#xff1a;HEi免费资源网{{message}}这里的message就是一个slot&#xff0c;但是它绑定的是父组件的数据&#xff0c;而不是组件< child-component >的…

Java – JDK 8的远景

世界正在缓慢但肯定地发生变化。 经过更改后&#xff0c;Java有了JDK 7的全新外观&#xff0c;Java社区期待JDK 8&#xff08;可能还有JDK 9&#xff09;所带来的其余改进。 JDK 8的目标目的是填补JDK 7实施中的空白-该实施中剩下的部分难题&#xff0c;应该在2013年底之前为广…

CSS 学习路线(一)元素

元素(element) 类型:替换和非替换元素 替换元素(replaced element): 用来替换元素内容的部分并非由文档内容直接显示. eg:img input 非替换元素(nonreplaced element): 其内容由用户代理在元素本身生成的框显示. eg:绝大多数都是非替换元素 基本元素类型:块级(block-lev…

[urllib]urlretrieve在python3

python3下面要使用&#xff1a;urllib.request.urlretrieve()这种形式的调用 1 from urllib.request import urlretrieve 2 3 4 urlretrieve(url, path) 转载于:https://www.cnblogs.com/sigai/p/8178375.html

使用Gulp压缩CSS/JS

一、安装 1.安装gulp npm install -g gulp2.检查gulp 版本 gulp -v3.在项目文件夹下安装gulp npm install --save-dev gulp二、压缩JS 1.安装gulp-uglify模块 npm install gulp-uglify2.在项目根目录创建gulpfile.js文件 3.在gulpfile.js文件中写入代码 // 获取 gulpvar gulp …

android活动开始,android – 点击谷歌地图标记infoWindow开始活动

我建议使用HashMap或类似的东西.当您遍历对象列表并为它们创建标记时,还要将标记添加到列表中,使用对象的ID作为键,将标记作为值&#xff1a;private HashMap markerMap new HashMap();…for(MarkerObject obj : this.markerObjects){//If the marker isnt already being disp…

Hamcrest包含匹配器

与Hamcrest 1.2相比 &#xff0c;针对Matchers类的Hamcrest 1.3 Javadoc文档为该类的几种方法添加了更多文档。 例如&#xff0c;四个重载的contains方法具有更具描述性的Javadoc文档&#xff0c;如下面所示的两个比较屏幕快照所示。 尽管仅通过尝试就可以弄清楚“包含”匹配器…

华为cor—al10_cor al10是华为什么型号 cor al10是华为啥型号

cor al10是华为荣耀Play。外观方面&#xff0c;荣耀Play提供有星云紫&#xff0c;极光蓝&#xff0c;幻夜黑三种基础配色&#xff0c;以及幻夜黑与魅焰红的酷玩版配色&#xff1b;拍照方面&#xff0c;荣耀Play具有1600万AI双摄像头&#xff0c;前置摄像头为1600万像素&#xf…

函数 (四) 迭代器和生成器

一 迭代器 一 迭代的概念 #迭代器即迭代的工具&#xff0c;那什么是迭代呢&#xff1f;#迭代是一个重复的过程&#xff0c;每次重复即一次迭代&#xff0c;并且每次迭代的结果都是下一次迭代的初始值 while True: #只是单纯地重复&#xff0c;因而不是迭代print(>) l[1,2,3]…

进阶-JMS 知识梳理

JMS 一、 概述与介绍 ActiveMQ 是Apache出品&#xff0c;最流行的、功能强大的即时通讯和集成模式的开源服务器。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现。提供客户端支持跨语言和协议&#xff0c;带有易于在充分支持JMS 1.1和1.4使用J2EE企业集成模式…

android蓝牙pair,Android向更多蓝牙设备开放Fast Pair功能 配对更轻松了

原标题&#xff1a;Android向更多蓝牙设备开放Fast Pair功能 配对更轻松了 来源&#xff1a;cnBeta.COM蓝牙是一项应用非常广泛的无线技术&#xff0c;在无线音频配件、智能手表和智能家电中都广泛使用。不过蓝牙设备的配对体验并不优秀&#xff0c;而且无法实现跨平台的一致性…

用CSS让DIV上下左右居中的方法

例如 一个父div(w:100%;h:400px)中有一个子div(w:100px;100px;)。让其上下左右居中。 方法一&#xff08;varticle-align&#xff09; 理念 利用表格单元格的居中属性。 步骤 父div外层配置一个div&#xff0c;同时设置为表格元素 (display: table)&#xff0c;宽度为100%父…

功能性Java集合

如今&#xff0c;在功能上大肆宣传&#xff0c;因此至少在Java集合方面&#xff0c;我将简要介绍一下其中的功能。 我个人喜欢标准 集合API&#xff0c;但在某些情况下可能会很尴尬并添加其他详细信息。 在Java 8的更高版本中&#xff0c;这应该不是问题。 在那里&#xff0c;…

python绘制帕累托图

python绘制帕累托图代码 1 import pandas as pd2 import matplotlib.pyplot as plt3 plt.rcParams[font.sans-serif][SimHei]#表示可以显示中文4 plt.rcParams[axes.unicode_minus]False#表示可以正常显示正负号5 datapd.read_csv(catering_dish_profit.csv,index_coltype)6 pr…

currentStyle、getComputedStyle 获取样式

style.height 获取的是行间的样式 currentStyle.height、getComputedStyle(elem,null).height 获取的是 div 的 content 的宽高&#xff0c; clientHeight 获取的是 contentpadding&#xff0c; offsetHeight 获取的是contentpaddingborder。 <script> window.onload…

html5 测评游戏,暗黑之王评测:HTML5游戏铸就最华丽ARPG冒险

由白鹭时代(Egret Technology)与比悦科技联手推出的重度大型HTML5游戏《暗黑之王》&#xff0c;一款典型的ARPG手游&#xff0c;其HTML5版本推出以来&#xff0c;获得了来自业界、玩家和媒体的大量关注。其丰富的游戏内容和玩法&#xff0c;加上卓越的游戏性能表现&#xff0c;…