在您的Maven-Fu包中增加了一些东西

Apache Maven很简单,但是功能非常强大。 使用一些技巧,您可以大大简化和优化您的开发经验。

处理多个非托管模块

假设您有一个主项目A提供了两个实用程序模块foobar ,另一个项目B Afoobar

在使用B ,您意识到需要偶尔对foobar进行一些调整。 但是,由于它们在不同的项目中,因此通常需要

  • 切换到A
  • 做出改变
  • mvn install
  • 切换回B
  • 和“刷新”依赖项(如果您使用的是IDE)。

每次都需要进行上游更改。

使用Maven,您可以使用模拟主POM临时“合并”这三部分,该主POM将foobarB定义为子模块:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><!-- blah blah blah --><modules><module>foo</module><module>bar</module><module>B</module></modules>

对我有什么用?

IDE(如IntelliJ IDEA )会将根标识为多模块项目。 这意味着您将能够:

  • 从一个模块无缝浏览到另一个模块。 不再需要反编译,字节码不兼容或源映射 ; 在“综合”项目范围内搜索某种类或方法的用法(或重构其中一种方法)时,非常方便。
  • 在同一项目窗口中按需修改每个模块的源和资源。 IDE将自动重新编译所做的更改,并将所有内容添加到运行时类路径中。 方便进行带热重装的IDE测试和调试。
  • 版本无缝。 如果这三个模块位于不同的VCS根目录下,则IDEA(如IDEA)将分别跟踪每个存储库。 如果您提交了一组更改,则每个存储库都会有一个新的提交,以反映其自己的更改部分; 都带有相同的消息!

同时,如果构建了根模块,那么普通的Maven将按照适当的顺序构建foo / barB (如果需要),这正是我们想要的。

相对路径,FTW!

即使模块分散在整个文件系统中,Maven仍可以通过相对路径轻松解决它们:

<modules><module>../foo</module><module>grandpa/papa/bar</module><module>../../../../../media/disk2/repos/top-secret/B</module></modules>

放下那

也许最常用(因此最被滥用 )的Maven命令是:

mvn clean install

在您对项目进行一些更改后,事实上的事实便会运行。

而且,在大多数情况下,这简直是过分杀伤力。

从头开始?

该命令结合了两个生命周期阶段 – Maven构建过程的“阶段”。 阶段具有确定的顺序; 因此,如果您请求某个阶段运行,则其生命周期中的所有先前阶段都将在此阶段之前运行。 但是,如果Maven插件发现自己无事可做,那么他们就足够聪明地跳过工作。 例如,如果编译的类是最新的,则不会进行编译。

现在, clean不再是默认生命周期的一部分; 而是通过删除整个target目录从头开始。 另一方面, install几乎快结束了(就在默认生命周期中进行deploy之前)。

mvn clean install将同时运行这两个阶段; 而且,由于clean介于两者之间的所有事物也同样如此

当您想要清理所有内容并最终将最新的工件安装到本地 Maven存储库中时,它很方便。 但是在大多数情况下,您并不需要所有这些。

此外, install最终会使您的本地Maven缓存混乱; 特别是如果您经常使用MB或GB大小的捆绑包进行快照/发布。

只做必要的事情!

马文福

如果您更新了一个源文件,并希望将其传播到target/classes目录:

mvn compile

Maven将自动检测任何更改–如果没有更改,则完全跳过编译。

如果更改是在测试类或资源中:

mvn test-compile

将其放入target/test-classes

只是为了运行测试(它将自动编译任何脏的源代码/测试类):

mvn test

要获得target最终捆绑包的副本:

mvn package

由于您可能经常要在包装之前先从干净的表盘开始:

mvn clean package

同样,只需指定结束阶段即可; 或同时包含开始和结束目标(如果要在某种程度上保持清洁)。 您将节省大量时间,处理能力和脾气。

同时在生产中…

如果您当前的版本可以投入生产,只需忘记上面的大部分内容即可;)

mvn clean package

虽然任何“子命令”在理论上都应该做同样的事情,但是您不想冒险;)

虽然我使用上面的package ,但从某种意义上说, install也会更好。 因为这样您将在.m2/repository中拥有生产工件的副本–如果丢失了已交付/部署的副本,则可能会节省很多时间。

更多跳过…

--no-snapshot-updates

如果您仔细观察了一个涉及快照依赖项的构建,您会发现它花了几秒钟的时间来搜索快照的Maven元数据文件(并最终以警告告终;除非您习惯于将快照工件发布到远程)。

如果您还本地建立快照依赖关系,那么通常这没有用,因此可以通过--no-snapshot-updates-nsu参数禁用元数据检查(和快照同步尝试)。

当然, -o将阻止所有远程同步; 但是如果您确实想提取某些依赖项,则不能使用它,在这种情况下, -nsu会有所帮助。

您可以跳过编译!

像(著名的) -Dmaven.test.skip –或-DskipTests ,您可以通过-Dmaven.main.skip跳过编译步骤(即使代码有所更改)。 当您只想运行测试而无需花费编译开销时,非常方便; 当然,如果您知道这些内容已经被编译。 就像-DskipTests一样-但是-DskipTests

( 对此SO帖子表示敬意)

马文福

延续:

您可能已经知道,如果模块在构建过程中发生故障,则可以通过-rf :module-name参数从该点恢复构建。

此参数也可以立即使用。 它不仅限于故障场景。 如果您有30个模块,但是只想构建最后5个模块,则可以使用-rf :name-of-26th-module

美味的测试技巧

继承测试

通常,Maven工件不包括测试类/资源。 但是在某些情况下,您希望将一些基本测试类继承到子模块中。 使用测试罐说明符,您可以继承仅包含测试类和资源的工件:

<dependency><groupId>com.acme</groupId><artifactId>foo</artifactId><version>3.2.1</version><type>test-jar</type><scope>test</scope></dependency>

“从属”模块上的相应构建配置如下:

<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><executions><execution><goals><goal>test-jar</goal></goals></execution></executions></plugin></plugins></build>

一个警告是,在此过程中不会继承可传递测试依赖项,而必须在每次使用测试JAR时再次手动指定它们。 (至少我没有遇到更好的选择。)

如果您正在处理一个测试用例,请不要全部运行。

-Dtest=com.acme.my.pkg.Test可以单独进行WIP测试,因此可以节省大量时间。

根据您的测试运行程序, -Dtest 也可能支持通配符选择器 。

当然,您可以临时修改测试插件配置的或数组(例如SureFire )以限制可运行测试的集合。

调试它

马文福

调试Maven测试?

如果您的测试运行程序(例如SureFire)允许您自定义用于测试的命令行或JVM参数,则可以轻松地将派生的JVM配置为在测试开始执行之前等待调试器 :

<build><pluginManagement><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><!-- ... --><configuration><argLine>-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,address=8000</argLine>

调试Maven本身?

如果您正在编写或对Maven插件或扩展进行故障排除,则在调试模式下运行Maven本身会很方便。

Maven最终是Java,因此您可以简单地调用调用时运行的最终命令,然后使用-Xdebug …params重新运行它。

但是Maven已经有了一个更酷的mvnDebug命令,可以自动为您执行此操作。 它的语法与mvn相同,因此非常容易习惯。

调用后,默认情况下它将在端口8000上侦听调试器,并在连接一个端口后立即开始执行; 并在断点处停止,显示内部状态,允许表达式求值等。

看日志!!!

这是值得的,因为我们非常善于忽略事物-就在眼前。

就在一开始

我敢打赌,在构建开始时,Maven会有95%的机会喷出至少一个[WARNING] 。 虽然我们几乎总是忽略或“推迟”它们,但它们会在将来的某个时刻咬人。

即将结束

如果出现编译,测试或其他故障,Maven将尝试通过转储上下文(stacktraces, [ERROR]等)来提供帮助。 有时,您需要向后滚动一到两页才能找到实际的内容,因此,不要在第一次尝试时就放弃并砸在脸上。

最近,我花了将近一个小时的时间来弄清楚-rf :原因-rf : 'd build失败; 从头开始时,同一件事成功了。 最后,它systemPath关于systemPath依赖项解决错误的两行[WARNING]systemPath 。 就在我眼前,却如此无形。

马文福

绝望的时光

在某些情况下,标准的Maven输出无法查明问题,在跟踪模式( -X )中运行Maven是最佳做法。 尽管其输出可能令人生畏,但它包含Maven(以及您)在构建过程中需要了解的所有内容。 插件版本,编译/测试依赖树,外部命令调用(例如测试); 这样您就可以深入挖掘并找到罪魁祸首。

一如既往,耐心是一种美德。

最后的话

就像使用Maven一样,

  • 知道你在做什么。
  • 知道你真正想做什么。
  • 相信Maven可以做到 ,除非另有证明;)

翻译自: https://www.javacodegeeks.com/2018/11/additions-bag-maven-fu.html

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

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

相关文章

ci 邮件 html模板,CI Email类发邮件

发邮件代码详情private function _send_mail($data) {//附件一&#xff0c;名称参数编码转换if(!empty($data[resume_name])){$file_name iconv(UTF-8,GB2312,$data[file_name]);}//附件二&#xff0c;名称参数编码转换if(!empty($data[resume_name])){$resume_name iconv(UT…

Java安全动画

总览 自从JDK 1.2中引入安全沙箱模型以及JDK提供的安全API的发展以来&#xff0c;Java安全就一直是一个复杂的话题。 并发实用程序也观察到类似的问题&#xff0c;并且开发了一种名为Java Concurrent Animated的工具&#xff0c;目的是通过有趣而有趣的方式降低进入这些实用程序…

在计算机网络系统的远程通信中,在计算机网络系统的远程通信中,通常采用的传输技术是...

摘要&#xff1a;算机体系体系模板模板最适宜采用的合钢是组。系统信中民主命叙主义关于革命以下义革误的和社会主述错是(。程通常采传输不属民主主义济纲的三大经以下于新领的是(。...算机体系体系模板模板最适宜采用的合钢是组。网络不属特殊国无级自的是产阶以下于中有的优点…

ajax div 赋值重新渲染_优化向:单页应用多路由预渲染指南

前言Ajax 技术的出现&#xff0c;让我们的 Web 应用能够在不刷新的状态下显示不同页面的内容&#xff0c;这就是单页应用。在一个单页应用中&#xff0c;往往只有一个 html 文件&#xff0c;然后根据访问的 url 来匹配对应的路由脚本&#xff0c;动态地渲染页面内容。单页应用在…

fpga运算服务器_一张图了解CPU、GPU、ASIC、FPGA性能、功耗效率、灵活性

​CPU&#xff1a;中央处理器&#xff08;Central Processing Unit&#xff0c;CPU&#xff09;&#xff1a;通用芯片&#xff0c;主要生产厂家如intel、AMD等&#xff0c;用于PC、服务器等领域。CPU作为通用芯片&#xff0c;可以用来做很多事情&#xff0c;灵活性最高&#xf…

aspen变压吸附塔_空压机科普:吸附式干燥机的结构和原理

精彩内容本文以主流的“变压吸附式”干燥机为例进行讲解。“吸附”原理一致&#xff0c;“脱附再生”流程有所区别。从而大致形成以下几种常见类型&#xff1a;●无热吸附式——使用一部分经过干燥后的压缩空气&#xff0c;经降压后吹扫吸附剂&#xff0c;实现吸附剂“再生”&a…

小学计算机管理,小学计算机室管理制度

小学计算机室管理制度 (2页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;19.90 积分芹菜小学计算机室制度1、计算机室由上电脑课老师负责管理。2、计算机室是进行电脑技术学习和操作的场所&#xff…

异形3×3魔方还原教程_【初级篇】(四)最简单的三阶魔方入门教程——中层还原...

本系列教程适合刚刚接触魔方&#xff0c;又比较有好奇心&#xff0c;是为渴望学会还原魔方&#xff0c;又不想死记公式的人准备的。全部教程只使用三种公式&#xff0c;还原过程以理解为主&#xff0c;公式为辅。第四部分 中层棱块还原4.1 预览中层棱块还原后的效果中层还原以后…

吞吐量-Corda的故事

我最近开展了一个针对特定用例的Corda性能项目。 这个项目的结果使我们在170多个节点的网络上一天之内处理了1.15亿个请求。 此外&#xff0c;Corda每秒能够处理6300个请求&#xff0c;确认满足了网络的最高要求。 迄今为止&#xff0c;这是迄今为止已部署的最大的Corda网络&am…

httpurlconnect设置中文参数_数控三菱CNC机床参数的设置及报警解除!

数控三菱CNC的硬件连接检查与设置执行完毕向系统送电后&#xff0c;显示器上的READY绿灯仍然不亮。而且在〔诊断〕――〔报警〕 画面上显示很多报警内容&#xff0c;哪些是开机时必须设置的呢&#xff1f;又如何解除故障报警呢&#xff1f;1.开机参数1.1 基本参数的设置原装系统…

计算机如何更新苹果系统,苹果系统怎么更新_苹果电脑mac如何更新升级系统-win7之家...

苹果电脑跟windows系统一样&#xff0c;也是会在发布之后不断的推送新版本让用户们进行升级&#xff0c;不仅可以修复bug还可以增加新功能&#xff0c;不过很多用户可能都会有一个疑问&#xff0c;就是苹果系统怎么更新呢&#xff1f;方法并不难&#xff0c;本文给大家讲述一下…

手术步骤_近视飞秒激光手术和传统Lasik手术比较

传统LasikLASIK手术操作时分为两个步骤&#xff1a;第一个步骤医生需要制作一个角膜瓣&#xff1b;第二个步骤是掀开角膜瓣&#xff0c;以准分子激光雕琢角膜&#xff0c;进行视力矫正&#xff0c;雕琢完毕后将角膜瓣复位即手术完成。传统的角膜制瓣是用机械式的设备与一个微型…

jenkins部署java_在Window上使用Jenkins自动部署和上传快照Java工件

jenkins部署java这篇文章将展示如何使用Jenkins Continuous Integration自动执行Java Web应用程序&#xff08;使用MYSQL DB和基于Hibernate ORM在基于REST的Jersey2 Spring环境中开发的学生申请应用程序&#xff09;的部署过程-生成项目&#xff0c;运行单元测试&#xff0c;上…

苹果电脑怎么更换计算机模式,图文详解苹果电脑如何切换成windows系统

苹果电脑默认安装的是Mac系统&#xff0c;有的人很喜欢&#xff0c;有一部分人却怎么都用不习惯&#xff0c;觉得windows系统用起来比较顺手。为了能提高办公效率&#xff0c;给苹果电脑安装双系统&#xff0c;那么有什么办法能将苹果电脑切换成windows系统&#xff1f;方法当然…

input内的字体颜色_嘉兴市硅胶喷涂颜色油订制

嘉兴市硅胶喷涂颜色油订制&#xff0c;博越硅胶服务惠万家&#xff0c;欢迎惠顾。嘉兴市硅胶喷涂颜色油订制&#xff0c; 而它配合硅胶原材制作时是按照相应的比例来进行分配在加上硫化剂的配合才能够得到制作产品的原材料&#xff0c;色母的性能选择也影响着一个产品的性能&am…

计算机部件动漫,因一个片段肝了整部番,电脑配件上榜,它满屏“虎狼之词”...

原标题&#xff1a;因一个片段肝了整部番&#xff0c;电脑配件上榜&#xff0c;它满屏“虎狼之词”现在的动漫行业格外迎来了鼎盛时期&#xff0c;就连以前不被看好的国漫最近几年也是突飞猛进。一部动漫想要有人看&#xff0c;就必定有自己的亮点&#xff0c;甚至一句话一个场…

获取周一_Ace足球网冬至版周一推介

WINTER SOLSTICE冬至冬至又称“冬节”、“贺冬”,华夏二十四节气之一、八大天象类节气之一&#xff0c;与夏至相对。Ace足球网祝全体球友冬至快乐身体健康 波运亨通Lorem Ipsum周一推介微信支付失败&#xff0c;请使用支付宝购买推介后请与Ace客服联系获取推介请勿相信其他客服…

oauth2和jwt_使用具有OAuth2的Web应用程序和JWT的使用来调用API – WSO2 API Manager

oauth2和jwt在这篇文章中&#xff0c;我将分享我在WSO2 API管理器&#xff08;API-M&#xff09;中针对行业中非常常见且有用的场景的经验和理解。 简要地说明以下流程。 公开了一个API&#xff0c;供应用程序开发人员在API管理器的控制下使用&#xff08;这增加了对该API的访…

android listview 去掉水波纹效果_CocosCreator之分层管理的ListView

前言进入公众号回复listview即可获得demo的git地址。之前写的一篇文章《Creator之ScrollView那些事》中提到了官方Demo中提供的ListViewCtl,只是实现了纵向滑动&#xff0c;没有实现横向滑动。并且建议官方可以把功能做全然后放入组件库中供开发者使用。然后有个牛逼大神说这个…

小米小爱蓝牙音箱_UG绘制一个小米小爱同学蓝牙音箱

今天来绘制这么一个小米蓝牙音箱&#xff0c;渲染后的效果如下建模步骤&#xff1a;1打开UG&#xff0c;首先绘制一个直径为135mm的圆拉伸80mm。2在XZ平面上绘制草图&#xff0c;以Y轴旋转360度求差3整体抽壳2mm4继续在拉伸面上绘制这么一个大概的草图5选择草图的小圆&#xff…