我们都知道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插件。
关于作者
许晓斌(Juven Xu),国内社区公认的Maven技术专家、Maven中文用户组创始人、Maven技术的先驱和积极推动者,著有《Maven实战》一书。对Maven有深刻的认识,实战经验丰富,不仅撰写了大量关于Maven的技术文章,而且还翻译了开源书籍《Maven权威指南》,对Maven技术在国内的普及和发展做出了很大的贡献。就职于Maven之父的公司,负责维护Maven中央仓库,是Maven仓库管理器Nexus(著名开源软件)的核心开发者之一,曾多次受邀到淘宝等大型企业开展Maven方面的培训。此外,他还是开源技术的积极倡导者和推动者,擅长Java开发和敏捷开发实践。他的个人网站是:http://www.juvenxu.com。
相关推荐
# 基于Python和Arduino框架的LightBox项目 ## 项目简介 LightBox是一个结合了Arduino硬件、Python服务器端脚本和Python客户端脚本的项目。它旨在通过LED灯的状态反馈开发者的编译进程状态,从而提高开发效率。当编译过程出现错误或警告时,LightBox会根据情况改变LED灯的颜色,提醒开发者注意。 ## 项目的主要特性和功能 1. Arduino硬件电路使用Atmega 168芯片,通过Arduino编程控制RGB LED的状态以及外部传感器数据的读取和处理。支持随机颜色模式、命令模式等,并能通过串行端口与外部进行通信。 2. Python服务器脚本负责接收客户端的命令,并通过串行端口发送给Arduino硬件电路。同时,它还可以启动一个UDP服务器,等待客户端的连接和命令。
使用homeassistant 插件将tasmota 接入到米家
# 基于Spring和MyBatis Plus的敏捷工贸公司销售管理系统 ## 项目简介 本项目是一个基于Web的敏捷工贸公司销售管理系统,采用Spring和MyBatis Plus框架开发,前端使用Vue框架。系统旨在为管理员和员工提供操作平台,实现销售管理、库存管理、订单管理等核心功能,促进公司销售行业的信息化管理。 ## 项目的主要特性和功能 1. 用户管理包含用户登录、注册、退出、密码重置等功能,同时支持用户信息的查询、保存、更新和删除操作,不同角色(管理员、员工等)拥有不同权限。 2. 公告管理可进行公告信息的分页查询、详情查看、保存、更新、删除以及批量上传功能。 3. 客户管理实现客户信息的分页展示、详情获取、保存、更新、删除以及批量导入功能。 4. 物资管理涵盖物资列表查询、详情查询、保存、修改、删除,还支持批量上传物资数据。 5. 物资订单管理提供物资订单列表查询、详情查询、保存、修改、删除等功能。
数据库管理系统是一个基于Python开发的完整数据库管理解决方案,采用SQLite作为后端数据库,tkinter和ttkbootstrap作为前端GUI框架。系统提供了用户管理、数据表管理、数据操作、导入导出等完整的数据库管理功能。
【东吴证券】建筑材料行业跟踪周报:关税冲击下首选内需消费-2025-04-06
东北大学人工智能20级算法课设.zip
电子商务_Java高并发_Redis缓存优化_数据库设计_秒杀系统_分布式事务_性能调优_登录验证_密码加密_参数校验_订单处理_商品库存管理_支付系统_前端交互_后端API_系统
185659数值分析(五)(李庆扬清华).zip
内容概要:本文档介绍了美国国家半导体公司的LMH6515全差分放大器,适用于高达400 MHz的信号路径应用。该放大器具有200Ω的输入阻抗,A类输出级,支持卓越的低失真性能和线性度,适合作为电压放大器和ADC驱动器。文中详细讨论了LMH6515的输入和输出特性,包括输入阻抗、输出共模电压设定方法、增益控制机制及其与ADC的接口方式。此外,还探讨了不同负载条件下的带宽表现、电感的选择和布局技巧,以及电源和封装方面的注意事项。 适合人群:电子工程技术人员,尤其是从事射频、模拟电路设计的专业人士。 使用场景及目标:①用于设计和优化高性能、高频率的差分放大器电路;②帮助工程师理解和解决实际应用中的技术难题,如失真、带宽和增益控制等问题;③指导工程师在具体应用场景中选择合适的参数配置和元件搭配,以实现最佳性能。 其他说明:文档强调了LMH6515在高频应用中的优势,特别是在与ADC配合使用时的表现。同时提醒使用者关注关键参数的设定和电路板布局的影响,以确保系统的稳定性和可靠性。
210021102244.pdf
YOLOv10-PyQt5-GUI识别各类害虫-检测农业害虫防治和生态环境保护+数据集+训练好的模型+pyqt5可视化界面包含pyqt可视化界面,有使用教程 1. 内部包含标注好的目标检测数据集,分别有yolo格式(txt文件)和voc格式标签(xml文件), 共717张图像, 已划分好数据集train,val, test,并附有data.yaml文件可直接用于yolov5,v8,v9,v10,v11,v12等算法的训练; 2. yolo目标检测数据集类别名:pests(害虫),包括 Agrotis(夜蛾属)、Athetis_lepigone(一种 moth)、Athetis_lineosa(另一种 moth)、Chilo_suppressalis(螟虫)、Cnaphalocrocis_medinalis_Guenee(一种害虫)、Creatonotus_transiens(一种 moth)、Diaphania_indica(一种螟虫)、Endotricha_consocia(一种 moth)、Euproctis_sparsa(一种 moth)、Gryllidae(蟋蟀科)、Gryllotalpidae(蝼蛄科)、Helicoverpa_armigera(棉铃虫)、Holotrichia_oblita_Faldermann(一种金龟子)、Loxostege_sticticalis(一种 moth)、Mamestra_brassicae(菜青虫)、Maruca_testulalis_Geyer(一种 moth)、Mythimna_separata(粘虫)、Naranga_aenescens_Moore(一种 moth)、Nilaparvata(一种蚜虫)、Paracymoriza_taiwanalis(一种 moth)、Sesamia_inferens(玉米螟)、Sirthe
一个用ssh整合的员工信息查询系统.zip
基于C++和Qt实现的医院信息管理系统+源码+项目文档+数据库,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用。详情见md文档~ 语言C++,开发平台QT,数据库Mysql 2.软件设计包含医生、病人、药物和病例症状等的信息存储和管理 3.搭载智能治疗平台,可以通过输入病症匹配出最可能的患病列表 4.当确认病例时,可以推荐治疗方案,协助医生诊断 5.系统后台结合病例、药物等数据进行统计分析,给予预测或警报 基于C++和Qt实现的医院信息管理系统+源码+项目文档+数据库,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用。详情见md文档 语言C++,开发平台QT,数据库Mysql 2.软件设计包含医生、病人、药物和病例症状等的信息存储和管理 3.搭载智能治疗平台,可以通过输入病症匹配出最可能的患病列表 4.当确认病例时,可以推荐治疗方案,协助医生诊断 5.系统后台结合病例、药物等数据进行统计分析,给予预测或警报~
内容概要:本文档是关于嵌入式系统开发的合作协议书,详细规定了甲乙双方在嵌入式系统开发项目中的权利、义务、开发内容、交付时间、费用支付、保密条款、争议解决等方面的内容。甲方(嵌入式系统开发者)负责根据乙方(嵌入式系统需求方)的需求,开发包括硬件设计、软件开发、系统集成等在内的嵌入式系统,并确保系统符合法律法规、行业标准及乙方业务需求,具有稳定性、安全性、可靠性。乙方需提供详细需求文档,配合开发,按时支付费用并对系统进行验收。文档还明确了费用支付方式、违约责任、争议解决机制等,确保双方权益得到保障。 适合人群:嵌入式系统开发公司、需求方企业、法律顾问等相关人员。 使用场景及目标:①为嵌入式系统开发项目提供详细的合同模板,确保双方权利义务明确;②为开发过程中的各个环节提供指导,包括开发内容、交付时间、费用支付等;③为可能出现的争议提供解决机制,确保项目顺利进行。 其他说明:文档包含多个附件,如需求文档、设计方案、技术规格等,这些附件与主协议具有同等法律效力,共同构成完整的合同文件。双方应妥善保管附件,并在合同履行过程中共同遵守其中的约定。如有附件内容与主协议正文冲突,以主协议正文为准。
【世界卫生组织】WHO Academy investment case-2025-04-01
本资源隶属于编译器设计知识领域,采用Python实现与Tkinter GUI开发技术,核心内容聚焦有限状态机模型与词法单元识别算法,专为编程语言词法分析教学与编译器前端开发设计。资源包含完整的状态转换引擎实现、带语法高亮的源代码编辑器组件及多维度分析结果可视化模块,提供语法规则配置接口和错误定位机制,适用于计算机编译原理课程实验、编程语言原型开发及代码静态分析工具构建等场景。通过模块化的词法分析API与交互式GUI演示系统,有效降低编译器技术学习曲线,提升语言处理实践能力。
【SensorTower】2025年亚太发行商非游戏应用市场洞察-2025-02-18
# 基于Phalcon框架的快速后台管理系统 ## 项目简介 本项目是一款基于Phalcon框架的快速后台开发管理框架,专为开发者提供高效的后台管理系统解决方案。通过内置的MVC生成器,开发者可以快速生成控制器、模型、视图及操作菜单,从而将更多精力集中在系统业务逻辑的开发上。系统还提供了完整的管理员权限管理、后台菜单管理、基础用户管理及附件管理等功能,帮助开发者快速搭建功能完善的后台管理系统。 ## 项目的主要特性和功能 1. MVC生成器通过设计数据表,一键生成控制器、模型、视图及操作菜单,极大提升开发效率。 2. 管理员权限管理提供完整的权限管理功能,支持角色分配和权限控制,确保系统安全。 3. 后台菜单管理支持动态管理后台菜单,方便管理员根据需求调整系统功能。 4. 基础用户管理提供用户管理功能,支持用户信息的增删改查及权限分配。 5. 附件管理支持文件上传和管理,方便系统处理附件资源。
# 基于Spring Boot框架的乐购游戏商城后端系统 ## 项目简介 本项目是乐购游戏商城系统的后端部分,基于Spring Boot框架和MyBatis Plus ORM工具构建,采用Java语言编写。它为商城系统提供了各类后端接口,涵盖用户管理、商品管理、订单管理、留言板管理、通用功能、配置管理以及文件上传下载等功能模块。 ## 项目的主要特性和功能 1. 用户管理包括用户登录、注册、退出、密码重置、信息获取、列表查询、保存更新删除等操作。 2. 商品管理涵盖商城公告、商城游戏、游戏分类等管理,具备CRUD操作及分页查询功能。 3. 订单管理对订单信息实现查询、保存、更新、删除等,还提供提醒接口用于统计满足特定条件的订单数量。 4. 留言板管理可进行留言板信息的查询、保存、更新、删除,并提供根据特定条件统计留言数量的提醒接口。 5. 通用功能如基于经纬度获取位置信息、人脸比对、获取表列信息、根据条件获取记录数、单列求和、分组统计、按值统计等。
【世界卫生组织】空气污染的健康影响:一般概述-2025-03-19