版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、maven的java插件开发指南-编程 开发技术maven的java插件开发指南译文出处: 刘小刘 原文出处:the apache software foundation介绍本指南的目标是帮助用户使用java开发maven插件。重要声明:插件命名规范和apache maven商标通常将你的插件命名为<yourpl ugi n>-maven-pl ugi n o强烈反对命名为mavcn-<yourplugin>-plugin (maven在插件名开头),因为这 是apache maven组织为官方maven插件保留的命名格式,用org. apache, maven, pl
2、ugins作为组id。使用此命名是对apache maven商标的侵 权。你的第一个插件这一部分我们将构建一个不带参数、运行时输出一行信息的简单插件,会覆盖创 建插件项目的基本操作、java mojo的核心内容,以及执行mojo的两种方式。你的第一个mojo最简单地,一个java mojo只包含一个类。不需要像ejb有多个类,尽管包含一 组相似mojo的插件很可能提取一个抽彖基类以合并公共代码。在代码树屮搜索mojo时,plugin-tools寻找带有mojo形式的java5注解的类 或带有goal的javadoc型注解。所有带有这样注解的类包含在插件配置文件中。个简单的mojo下面是一个简单
3、的无参数moj。类,它可能是最简单的mojo to代码示例后面是 各部分的说明。package sample, plugin;import org.apache, maven, plugin. abstractmojo;import org. apache, maven. plugin. mojoexecutionexception;import org. apache, maven, plugins, annotations. mojo;/* says "hi" to the user*/mojo( name 二 sayhi)public class grcctingmo
4、jo cxtcnds abstractmojopublic void execute() throws mojoexecutionexception getlogo. info( "hello, world.,z ); 类org.apache.maven.plugin.abstractmojo提供了实现一个mojo需要的大部分基础功 能,除了 execute方法。 “mojo”注解是必须的,它控制了 mojo何时和怎样被执行 execute方法可以抛出两种异常: org.apache.maven.plugin.mojoexecutionexception 如果发牛了非预期的错误抛出此
5、 界常,显示”build error”信息。 org.apache.maven.plugin.mojofailureexception 如果发生了预期内的错误(例如编译 错课)抛出此异常,显示“build failure”信息。 getlog方法(在abstractmojo中定义)返回一个类似log4j的日志对象,插件可以 用它输hl debug, info, warn, error级别的th忐。这个th忐是用户nj接受的显示信息的 方式。杳看retrieving the mojo logger? 了解如何恰当使用。所有的mojo注解在?mojo api specification中描述。项口
6、定义插件的mojo写完后,就可以构建插件了。插件描述中需要设置以下几项:groupld插件的组id,应当与mojo包名的共同前缀一致arti facttd插件名version插件版本packaging应设为” maven-plugin”dcpcndcncics必须声明对maven plugin tools api的依赖以解析” abstractmojon和相关 类下面是示例mojo的pom示例,参数按上表要求设定:<project><modelversion>4. 0. 0</modelversion><groupld>samplc. plugi
7、n/groupld><artifactld>hello-maven-plugin</artifactld><version>1. 0-snapshot/version><packaging>maven-plugin/packaging><namc>samplc parameter-loss mavcn plugin/namc><dependencies><dependency><grouptd>org. apache, maven/grouptd><ar ti f
8、ac tl d>mav cn-plug in - 3pi/eirtif3ctld> <version>3. 0</version></dependency><!一一 dependencies to annotations 一一><dcpcndcncy><groupld>org. apache, maven, plugin-tools</groupld><artifactld>maven-plugin-annotations</artifactld> <version&g
9、t;3. 4</version><scope>provi ded</scope></dcpcndcncy></dependencies></project>构建目标在maven-plugin中定义了很少几个目标作为标准构建生命周期的一部分:compile编译插件的java代码,构建插件描述test运行插件的单元测试package构建插件jai包install将插件jar安装到本地仓库deploy将插件jar部署到远程仓库执行你的第一个mojo执行新插件的最直接方式是在命令行直接指定插件口标。要这样做,你需要在项 目屮这样配
10、置 hello-maven-plugin:<build><plugins><plugin><groupld>samplc. plugin</groupld><artifactld>hello-maven-plugin/artifactld> <version>l. o-snapshot</version></plugin></plugins>/bu订d>然后,指定目标的全名:mvn groupld:artifactld:version:goal例如,要运行示例插件
11、的mojo,在命令行输入“mvn sample, plugin:hello-maven-plugin:1. 0-snapshot:sayhi” 。 注:运行单一目标不需耍指定版本。缩短命令行有儿种方式缩短输入:如果运行本地仓库安装的最新版插件,可以省略版本号。使用”nwn sample.plugin:hello-maven-plugin:sayhi"运彳亍。 赋予插件一个短前缀,如mvn hcllo:sayhi。如果按照$prefix-maven-plugin的命名 方式(如果插件是apache maven的官方插件用maven$prefix-plugin)这是h动完 成的。也可以通
12、过额外的配置设置前缀,更多信息参见introduction to plugin prefix mappingo 最示,可以把插件的纟r id加入默认搜索的组id列表。这种方式需要在$user.home/.m2/settings.xml 中增加如下配置: <plugingroups> <plugingroup>sample plugin</plugingroup></plugingroups>此时,可以用” mvn hello:sayhiv运彳亍mojo 了。将mojo关联到构建生命周期你也可以配置插件关联到构建生命周期某个特定阶段的指定目标,示例
13、如下:<build><plugins><plugin><groupld>samplc. plugin</groupld><artifactld>hello-maven-plugin</artifactld><version>l. o-snapshot</version><executions><execution><phase>compile</phase><goals><goal>sayhi</goal>
14、; </goals> </cxccution> </executions> </plugin> </plugins> </build>这样java代码编译时这个简单mojo就会执行。更多绑定mojo到生命周期阶段 的信息,参考?build lifecycle。mojo原型利用mojo原型创建新插件项口 :mvn archetype:generate -dgroupid=samp1e. plugin -dartifactld=hello-maven-plugin -darchetypegroupid=org. apache,
15、 maven, archetypes -darchetypeartifac t t d=maven-archetype-pl ugin参数不带参数的mojo 一般没太大用处,参数捉供了以下重要功能:提供了让用户调整插件操作以适应应用的钩了提供一种不需要导航到对彖就能提取pom元素值的简单方式定义mojo参数定义一个参数很简单,只需要在mojo中创建一个实例变量并增加恰当的注解。 以下是带参数的简单mojo示例:/* the greeting to display.*/parameter( property = sayhigreeting", defaultvalue = "
16、helloworld!")private string greeting;注解z前的部分是参数说明。参数注解将变量声明为mojo参数。注解的 defaultvalue参数定义了变量的默认值。这个值可以包含引用项目变量的表达 式, 如” project, versi on” (在 ? u parameter express i ons" document 能 看到更多)。property参数支持引用用户在命令行中通过-d指定的系统属性。在项目中配置参数作为插件定义的一部分,插件的参数值配置在maven项目的pom. xml屮完成,示 例:<plugin><g
17、roupld>sample. plugi n</grouptd><artifactld>hcllo-mavcn-plugin</artifactid><version>1.0-snapsh0t</vers ion><configuration><greeting>welcome/greeting></configuration></plugin>在configuration部分,名为w greeting”的元素名是参数的名称,元素的 值” welcome"是赋予参数
18、的值。注意:更多细节参见?guide to configuring plugins。单值参数类型卜面是可作为mojo参数的简单变量类型及其值在pom中的解释规则。boolean包括boolean和boolean。读配置时,读到true字符串时将参数设为true,读 到其它字符串将参数设为falseo例如:/* my boolean.*/©parameterprivate boolean myboolean;myboolean>tnje/myboolean>定点数包括 byte, byte, int, integer, long, long, short 和 short。读
19、配置时,xml 屮的文本通过integer, parselnt ()或对应类型的valueof ()方法转为整型数。字 符串必须是有效的十进制整数,只包含数字0到9和可选的前置表示负数。 例如:/* my integer.*/©parameterprivate intcgcr myintcgcr;mylnteger>10/myinteger浮点数包含double, double, float和float。读配置时,使用对应类型的valueof () 将xml屮的文木转为二进制。文本可以是java语言规范3. 10. 2节规定的任意格 式。有效值示例如10和602e+23o/*
20、my double.*/©parameterpri vate double mydouble;<mydouble>l. 0</mydouble>口期包括date类型。读配置时,xml中的文本按” yyyy-mm-dd hh:mm:ss. s a”(如” 2005-10-06 2:22:55. 1 pm” )或” yyyy-mm-dd hh:mm:ssaw(如” 2005-10-06 2:22:55pm")格式转换。注意解析通dateformat. parse() 完成,允许格式的少许偏差。这个方法尽力解析出日期和时间,即使格式不严格 地匹配上述格式,
21、例如:/* my date.*/©parameterprivate date mydate;<mydate>2005-10-06 2:22:55.1 pm</mydate>文件和目录包括file类。读配置时,xml文件中的文本被当做需要的文件或目录路径。如 果是相对路径(不以/或驱动器字母如c:开头),路径是相对于p0m所在目录。 例如:/* my mie.*/©parameterprivate file myfile;<myfile>c:t emp</myfile>url包含url类。读配置吋,xml 'i1的文木被
22、当做url。格式必须遵循rfc2396,看 起来像 web 浏览器的 url (scheme: /host: port/path/to/f i 1 e)。转换 url 时对 它的任何部分没有限制。/* my url.*/©parameterprivate url myurl;<myurl>http:/maven. apache org/myurl>普通文木包含char, character, stringbuffer和string。读配置时,xml文件中的文本 被当做赋予参数的值。对cheir和character参数,只使用文本的第一个字符。枚举也可以使用枚举类型变
23、量。首先需要定义枚举类型,然后就可以在参数定义屮使 用了。public enum color green,red,blue/* my enum*/©parameter private color mycolor;在pom配置中可以使用这样的枚举:<myco1or>green</myco1or>也可以使用枚举类型的元素作为默认值,像下面这样:public enum color green,red,blue/* my enum*/©parameter(defaultvalue 二 green")private color mycolor;多值参
24、数类型下面介绍可以在mojo中作为参数使用的各种复合对彖,及它们在p0m中的解释 规则。一般来说,保存参数值(和参数值屮的元素)的对象的类型是按以下步骤 决定的(确定有效类型的第一步):1. 如果xml元素包含implementation m性,就使用它2. 如果xml标签包含”,尝试解析为类的全名3. 尝试将xml标签(首字母大写)解析为mojo所在包中的类4. 对数组,使用数组的元素类型(例如,对string参数使用string类型); 对集合和映射,使用mojo配置中指定的类;使用string作为集合类型的entry 和map的值的类型。一旦元素的类型确定了,xml中的文本将被转换为恰当
25、的对象。数纽数组参数通过多次指定来配置,例如:/* my array.*/©parameterprivate string myarray;<myarray><param>value1</param><param>valuc2</param></myarray>集合这一类包含所有实现 java. util. collection 的类,如 arraylist 或 hashseto 这些参数也像数组一样通过多次指定來配置,例如: /* my list.*/©parameterprivate list my
26、list;mylist><param>value1</param><param>value2</param></mylist>关于独立集合元素的映射细节,查看?mapping lists. o映射这一类包含所有实现java. util. map而未实现java. util. properties的类,如 hashmapo这些参数通过包含xml标签来配置,形$u<key>value</key>,例如:/* my map.*/©parameterprivate map mymap;mymap>
27、<key1>value1</key1><key2>value2</key2></mymap>properties这一类包含所有实现java. util. properties的映射。这些参数通过包含xml标 签配置,形如<property><name>myname</name> <value>myvalue</value> /property,例如:/* my properties.*/©parameterprivate properties mypropertie
28、s;mypropcrtics><property><name>propertyname1</name><value>propertyvaluel</value><property><propcrty> <name>propertyname2</name> <value>propertyvalue2</value><property></myproperties>其它对象类型这一类包含所有未实现 java. util. map、java. util. col lection 和java. util. dictionary 的类。例如:/* my object.*/©parameterprivate myobject myobject;<my
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 文化遗产保护与利用作业指导书
- 青蛙王子童话故事征文
- 农业种植技术指导服务合同及风险免责协议
- 物流运输业货物损坏丢失应对与免责条款协议
- 人工智能智能金融风控系统开发合同
- 2019届江苏专版高考政治一轮复习第九单元文化与生活引文类选择题专练讲义新人教版必修
- 企业认证与资质申请作业指导书
- 专注铸梦青春砥砺前行
- 西游记中的成长主题征文启示
- 移动应用开发流程与规范
- 物料员工作计划与总结
- 浙江省金华市2023年九年级上学期期末数学试题附答案
- JGT292-2010 洁净工作台标准
- 圣诞节元旦搞笑小品就剧本:浪子回家
- 2023年海南省天一大联考高一化学第一学期期末达标测试试题含解析
- 银行工会个人总结报告
- 部编版小学语文2-6年级词语表
- 甘肃省平凉市崆峒区2024届九年级英语第一学期期末统考模拟试题含解析
- 测绘法规与工程管理(第2版)完整全套教学课件
- 新疆大学新疆数字经济研究院:2023新疆平台经济发展调研报告
- 酒店预订确认函
评论
0/150
提交评论