Maven实战(八)——常用Maven插件介绍(下)

我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成,例如编译源代码是由maven- compiler-plugin完成的。进一步说,每个任务对应了一个插件目标(goal),每个插件会有一个或者多个目标,例如maven- compiler-plugin的compile目标用来编译位于src/main/java/目录下的主源码,testCompile目标用来编译位于src/test/java/目录下的测试源码。

用户可以通过两种方式调用Maven插件目标。第一种方式是将插件目标与生命周期阶段(lifecycle phase)绑定,这样用户在命令行只是输入生命周期阶段而已,例如Maven默认将maven-compiler-plugin的compile目标与compile生命周期阶段绑定,因此命令mvn compile实际上是先定位到compile这一生命周期阶段,然后再根据绑定关系调用maven-compiler-plugin的compile目标。第二种方式是直接在命令行指定要执行的插件目标,例如mvn archetype:generate 就表示调用maven-archetype-plugin的generate目标,这种带冒号的调用方式与生命周期无关。

认识上述Maven插件的基本概念能帮助你理解Maven的工作机制,不过要想更高效率地使用Maven,了解一些常用的插件还是很有必要的,这可以帮助你避免一不小心重新发明轮子。多年来Maven社区积累了大量的经验,并随之形成了一个成熟的插件生态圈。Maven官方有两个插件列表,第一个列表的GroupId为org.apache.maven.plugins,这里的插件最为成熟,具体地址为:http://maven.apache.org/plugins/index.html。第二个列表的GroupId为org.codehaus.mojo,这里的插件没有那么核心,但也有不少十分有用,其地址为:http://mojo.codehaus.org/plugins.html。

接下来笔者根据自己的经验介绍一些最常用的Maven插件,在不同的环境下它们各自都有其出色的表现,熟练地使用它们能让你的日常构建工作事半功倍。本文为下半部分。(上半部分内容参见Maven实战(七)——常用Maven插件介绍(上) )

maven-resources-plugin

http://maven.apache.org/plugins/maven-resources-plugin/

为了使项目结构更为清晰,Maven区别对待Java代码文件和资源文件,maven-compiler-plugin用来编译Java代码,maven-resources-plugin则用来处理资源文件。默认的主资源文件目录是src/main/resources,很多用户会需要添加额外的资源文件目录,这个时候就可以通过配置maven-resources-plugin来实现。此外,资源文件过滤也是Maven的一大特性,你可以在资源文件中使用${propertyName}形式的Maven属性,然后配置maven-resources-plugin开启对资源文件的过滤,之后就可以针对不同环境通过命令行或者Profile传入属性的值,以实现更为灵活的构建。

maven-surefire-plugin

http://maven.apache.org/plugins/maven-surefire-plugin/

可能是由于历史的原因,Maven 2/3中用于执行测试的插件不是maven-test-plugin,而是maven-surefire-plugin。其实大部分时间内,只要你的测试类遵循通用的命令约定(以Test结尾、以TestCase结尾、或者以Test开头),就几乎不用知晓该插件的存在。然而在当你想要跳过测试、排除某些测试类、或者使用一些TestNG特性的时候,了解maven-surefire-plugin的一些配置选项就很有用了。例如 mvn test -Dtest=FooTest 这样一条命令的效果是仅运行FooTest测试类,这是通过控制maven-surefire-plugin的test参数实现的。

build-helper-maven-plugin

http://mojo.codehaus.org/build-helper-maven-plugin/

Maven默认只允许指定一个主Java代码目录和一个测试Java代码目录,虽然这其实是个应当尽量遵守的约定,但偶尔你还是会希望能够指定多个源码目录(例如为了应对遗留项目),build-helper-maven-plugin的add-source目标就是服务于这个目的,通常它被绑定到默认生命周期的generate-sources阶段以添加额外的源码目录。需要强调的是,这种做法还是不推荐的,因为它破坏了 Maven的约定,而且可能会遇到其他严格遵守约定的插件工具无法正确识别额外的源码目录。

build-helper-maven-plugin的另一个非常有用的目标是attach-artifact,使用该目标你可以以classifier的形式选取部分项目文件生成附属构件,并同时install到本地仓库,也可以deploy到远程仓库。

exec-maven-plugin

http://mojo.codehaus.org/exec-maven-plugin/

exec-maven-plugin很好理解,顾名思义,它能让你运行任何本地的系统程序,在某些特定情况下,运行一个Maven外部的程序可能就是最简单的问题解决方案,这就是exec:exec的用途,当然,该插件还允许你配置相关的程序运行参数。除了exec目标之外,exec-maven-plugin还提供了一个java目标,该目标要求你提供一个mainClass参数,然后它能够利用当前项目的依赖作为classpath,在同一个JVM中运行该mainClass。有时候,为了简单的演示一个命令行Java程序,你可以在POM中配置好exec-maven-plugin的相关运行参数,然后直接在命令运行 mvn exec:java 以查看运行效果。

jetty-maven-plugin

http://wiki.eclipse.org/Jetty/Feature/Jetty_Maven_Plugin

在进行Web开发的时候,打开浏览器对应用进行手动的测试几乎是无法避免的,这种测试方法通常就是将项目打包成war文件,然后部署到Web容器中,再启动容器进行验证,这显然十分耗时。为了帮助开发者节省时间,jetty-maven-plugin应运而生,它完全兼容 Maven项目的目录结构,能够周期性地检查源文件,一旦发现变更后自动更新到内置的Jetty Web容器中。做一些基本配置后(例如Web应用的contextPath和自动扫描变更的时间间隔),你只要执行 mvn jetty:run ,然后在IDE中修改代码,代码经IDE自动编译后产生变更,再由jetty-maven-plugin侦测到后更新至Jetty容器,这时你就可以直接测试Web页面了。需要注意的是,jetty-maven-plugin并不是宿主于Apache或Codehaus的官方插件,因此使用的时候需要额外的配置settings.xml的pluginGroups元素,将org.mortbay.jetty这个pluginGroup加入。

versions-maven-plugin

http://mojo.codehaus.org/versions-maven-plugin/

很多Maven用户遇到过这样一个问题,当项目包含大量模块的时候,为他们集体更新版本就变成一件烦人的事情,到底有没有自动化工具能帮助完成这件事情呢?(当然你可以使用sed之类的文本操作工具,不过不在本文讨论范围)答案是肯定的,versions-maven- plugin提供了很多目标帮助你管理Maven项目的各种版本信息。例如最常用的,命令 mvn versions:set -DnewVersion=1.1-SNAPSHOT 就能帮助你把所有模块的版本更新到1.1-SNAPSHOT。该插件还提供了其他一些很有用的目标,display-dependency- updates能告诉你项目依赖有哪些可用的更新;类似的display-plugin-updates能告诉你可用的插件更新;然后use- latest-versions能自动帮你将所有依赖升级到最新版本。最后,如果你对所做的更改满意,则可以使用 mvn versions:commit 提交,不满意的话也可以使用 mvn versions:revert 进行撤销。

小结

本文介绍了一些最常用的Maven插件,这里指的“常用”是指经常需要进行配置的插件,事实上我们用Maven的时候很多其它插件也是必须的,例如默认的编译插件maven-compiler-plugin和默认的打包插件maven-jar-plugin,但因为很少需要对它们进行配置,因此不在本文讨论范围。了解常用的Maven插件能帮助你事倍功半地完成项目构建任务,反之你就可能会因为经常遇到一些难以解决的问题而感到沮丧。本文介绍的插件基本能覆盖大部分Maven用户的日常使用需要,如果你真有非常特殊的需求,自行编写一个Maven插件也不是难事,更何况还有这么多开放源代码的插件供你参考。

本文的这个插件列表并不是一个完整列表,读者有兴趣的话也可以去仔细浏览一下Apache和Codehaus Mojo的Maven插件列表,以的到一个更为全面的认识。最后,在线的Maven仓库搜索引擎如http://search.maven.org/也能帮助你快速找到自己感兴趣的Maven插件。

转载于:https://www.cnblogs.com/chenying99/archive/2012/06/22/2558631.html

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

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

相关文章

batch spring 重复执行_重复的Spring Batch作业实例

我有一个小的示例Spring Batch应用程序,该应用程序在首次启动时可以正常运行,但是每当我关闭该应用程序并重新启动jar时,我总是会收到此错误:Caused by: org.springframework.dao.DuplicateKeyException: PreparedStatementCallba…

世界最早投入运行的计算机网络是,世界最早投入运行的计算机网络是

满意答案xo68202016.12.21采纳率:41% 等级:10已帮助:219人计算机(computer)的原来意义是“计算器”,也就是说,人类会发明计算机,最初的目的是帮助处理复杂的数字运算。而这种人工计算器的概念&#xff0…

CodeSite日志使用

CodeSite日期记录对于调试程序而言非常方便,我们可以同时开启动态日志监视和文件日志: var Dest: TCodeSiteDestination; begin Dest : TCodeSiteDestination.Create( Self ); //开启文件日志 Dest.LogFile.Active : True; Dest.Lo…

cpc卡内计费信息异常包括_今日头条信息流广告投放效果好吗?信息流广告计费方式怎么收费?...

每一个营销平台推广方式都有多种,就像今日头条平台广告投放方式都有好几种,包括开屏广告、信息流广告、详情页广告等,当中最最常见广告样式就属信息流广告了。随着移动互联网时代的到来,几乎所有的互联网媒体都推出了信息流广告平…

高一计算机专业班主任工作总结,2016学年上学期高一班主任工作总结

转眼之间已经来到了2016年最后一个月,我的班主任工作也进入到了第四个月。这个月我班在自我管理以及班级活动方面取得了一定的成绩,也出现了很多问题。首先,临近学期末,同学们的学习状态逐渐懈怠,具体表现在上课吃东西…

vuex 源码分析_Vuex框架原理与源码分析

Vuex是一个专为Vue服务,用于管理页面数据状态、提供统一数据操作的生态系统。它集中于MVC模式中的Model层,规定所有的数据操作必须通过 action - mutation - state change 的流程来进行,再结合Vue的数据视图双向绑定特性来实现页面的展示更新…

断点续传和下载原理分析

最近做一个文件上传和下载的应用对文件上传和下载进行了一个完整的流程分析 以来是方便自己对文件上传和下载的理解,而来便于团队内部的分享 故而做了几张图,将整体的流程都画下来,便于大家的理解和分析,如果有不完善的地方希望 大…

昆仑量子计算机只是云计算模拟吧,量子模拟赛题让大学生认识未来计算发展方向...

2020 ASC世界大学生超算竞赛初赛阶段已经正式启动,来自全球的300多支高校参赛队将挑战当下最潮流的应用量子计算,使用超级计算机模拟并优化量子模拟算法,并尽可能地降低计算需求。这道赛题由鹏城实验室、高效能服务器和存储技术国家重点实验室…

zbrush缝线笔刷制作_Thepoly | 高质量写实人脸制作及实时渲染分享

1效果图展示2案例大纲一、基础模型搭建、面部高模细节雕刻和机械部分高模制作;二、头发、胡子、眉毛和汗毛分析;三、低模拓扑、UV和贴图烘焙;四、写实皮肤贴图绘制;五、Marmoset Toolbag 3实时渲染分析。3过程步骤1基础模型搭建、…

html下拉列表初始值不显示,javascript – 使用innerhtml显示下拉列表文本而不是值...

我有一个下拉列表,其中包含如下函数:car_list.options [1] 新选项(‘Mazda’,’A_Mazda’);我把A_Mazda作为区分的下拉值.现在,我有一个按钮,它将在表格视图中显示下拉列表的值.我想要显示的是下拉列表的文本而不是值.函数addRow()是我在表格形式中显示下拉列表值所…

4线电子围栏安装示意图_电子围栏报警系统安装施工过程(图解)

电子围栏是应用最广泛的周界防盗报警系统,系统主要由电子围栏主机、前端配件、后端控制系统三大部分组成。通常,电子围栏主机在室外,沿着原有围墙(例如砖墙、水泥墙或铁栅栏)安装,脉冲电子围栏主机亦通常在室外,通过信…

计算机基础知识总结论文,大学计算机基础总结论文

计算机基础实训课是针对非计算机专业的大一新生开设的计算机入门课程,是应用性和操作性都非常强的课程,力求培养学生对计算机的新知识、新技术的理解和应用,使学生能够有效的利用计算机来提高学习和工作效率。下面是学习啦小编为大家整理的大…

[置顶] 混响音效

[置顶] 混响音效 1.1混响的作用与基本原理 混响器即是人为地给声音加上混响的效果。这样通过改变场景的混响时间,可以对比较“干”的信号进行再加工,增加空间感,提高声音的丰满度,同时可以制造一些特殊的声音效果,如回…

python 机器视觉测量_python+opencv实现机器视觉基础技术(2)(宽度测量,缺陷检测,医学处理)...

本篇博客接着讲解机器视觉的有关技术和知识。包括宽度测量,缺陷检测,医学处理。python一:宽度测量在传统的自动化生产中,对于尺寸的测量,典型的方法就是千分尺、游标卡尺、塞尺等。而这些测量手段测量精度低、速度慢&a…