maven 构建增量包_使用Maven进行增量构建

maven 构建增量包

这是2020年,如果您要开始任何新的基于Java的项目,那么gradle应该是第一选择,但是由于某些原因,如果您仍然对Maven感兴趣,那么您可能会发现这篇文章很有用。

Maven Java / scala编译器插件对增量编译提供了不错的支持,但它无法处理一些极端情况,例如

  • 从源文件夹中删除文件时触发编译
  • 不更改代码时跳过单元测试。

大多数情况下,只是为了处理已删除文件的情况
“ mvn全新安装” ,这意味着将遵守完整的代码并执行单元测试。

Scala代码的编译很慢,如果项目包含运行缓慢的测试(如启动Webserver,spark上下文,IO等),则情况会变得更糟。 在许多情况下,等待时间可能是几分钟。

即使代码未更改,我也没有考虑浪费的CPU周期来运行测试。

作为一个实验,我从Gradle中吸取了一些想法,并编写了附加的Maven插件,该插件可以解决上述问题


1.更改代码并触发完整构建时,清理目标位置。

2.在不更改代码的情况下跳过单元测试执行。

这两个功能都可以帮助大大减少编译时间,因为在大多数情况下,只有很少的模块被更改并且可以使用以前的生成输出。 您可以通过启用此插件来快速构建。

如何使用插件

该插件是在预清理阶段添加的,将以下条目添加到pom.xml并使用“ mvn pre-clean install”
 

<plugin><groupId>mavenplugin</groupId><artifactId>compilerplugin</artifactId><version>1.0-SNAPSHOT</version><executions><execution><id>pre-clean</id><phase>pre-clean</phase><goals><goal>inc</goal></goals></execution></executions> </plugin>

插件代码,请@ compilerplugin GitHub库

使用插件的沙箱代码可用@ 编译器 plugintest github仓库

结论

始终收集有关构建的度量标准,例如编译所需的时间,测试所花费的时间,包大小,依赖项等。一旦开始测量,您将注意到构建的速度很慢,并且还需要与代码相同的爱好。

快速构建是实现连续交付的第一步。

翻译自: https://www.javacodegeeks.com/2020/03/incremental-build-with-maven.html

maven 构建增量包

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

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

相关文章

带Quarkus的Qute模板

Quarkus附带了自己的模板引擎Qute&#xff0c;该引擎已经包含了一组有趣的功能。 在下面的视频中&#xff0c;我将展示基于动作的MVC与JAX-RS的基本用法&#xff0c;该行为将我们的请求转发到HTML模板。 要自己尝试Qute&#xff0c;请查看以下资源&#xff1a; 示例项目 Qut…

Spring的IoC与DI差异

一、IoC IoC&#xff0c;全称为Inversion of Control&#xff0c;即控制反转。 IoC是依赖倒置原则的一种代码设计思想&#xff0c;把创建对象的权利交给框架&#xff0c;是框架的重要特征。其包括依赖注入&#xff08;Dependency Injection&#xff0c;简称DI&#xff09;和依赖…

jvm(3)-垃圾收集器与内存分配策略

【0】README0.1&#xff09;本文部分文字转自&#xff1a;深入理解jvm&#xff0c;旨在学习 垃圾收集器与内存分配策略 的基础知识&#xff1b;【1】垃圾回收概述1&#xff09;GC&#xff08;Garbage Collection&#xff09;需要完成的3件事情&#xff1a;哪些内容需要回收&…

防火墙例外里没有远程桌面_证明没有例外

防火墙例外里没有远程桌面您如何证明虚无的存在&#xff1f; 你应该&#xff1f; 在我编写的某些测试中&#xff0c;尤其是围绕验证或创建空对象的测试中&#xff0c;我真正想写的是这样的&#xff1a; assertThat( ... call some code ... ) .doesntThrow(); 您可以合理地编…

Java工程师必备技能

一、JavaSE &#xff08;1&#xff09;Java基础 1、数据结构 2、算法 3、包装类 4、字符串 5、异常处理 6、类与接口 7、泛型 8、集合 9、IO操作 10、序列化 11、迭代 12、枚举 13、properties 14、压缩 15、日期 &#xff08;2&#xff09;Java进阶 1、多线…

打破双亲委派么,怎么打破_打破了vs你错了

打破双亲委派么,怎么打破为微服务构建REST API时&#xff0c;需要做出一些关于响应的设计决策。 某些响应显然是微服务周围协议的产物-例如3xx代码之类的东西都与重定向和路由有关。 通常&#xff0c;您将尝试获取正确的2xx代码以取得成功。 如有疑问&#xff0c;将为200&…

java如何查看调用记录_查看Java记录

java如何查看调用记录JEP 359 &#xff08;可在JDK 14中用作预览功能&#xff09;将记录引入Java。 记录是对普通数据聚合建模的简单方法。 一个简单的范围记录如下所示&#xff1a; record Range( int from, int to) {} 记录定义实际上与具有以下内容的最终类相同&#xff1…

递归 反转字符串_使用递归反转字符串

递归 反转字符串1.简介 在本文中&#xff0c;您将学习如何使用递归方法来反转字符串。 第一个程序是反转字符串&#xff0c;第二个程序将读取用户的输入。 在之前的文章中&#xff0c;我已经展示了如何不使用任何内置函数来反转字符串&#xff0c;以及如何反转字符串中的单词 …

jvm(4)-虚拟机性能监控与故障处理工具

【0】README0.1&#xff09;本文文字描述转自 “深入理解jvm”&#xff0c;旨在了解 虚拟机性能监控与故障处理工具的基础知识&#xff08;仅仅在于了解&#xff09;&#xff1b; 【1】概述1&#xff09;给一个系统定位问题的时候&#xff0c;知识&#xff0c;经验是关键基础&a…

代码大全和新月神话_神话般的代码

代码大全和新月神话考虑以下代码段&#xff1a; int max 10; int a 0; while (true) {// do a thing that may result in an early return if (a > max) {break;} }throw new RuntimeException("It ran out of attempts");上面有一些WTF。 循环有点不可思议&am…

Spring 思维导图,让 Spring 不再难懂(cache篇)

转载自&#xff1a; java思维导图 开源中国关于缓存缓存是实际工作中非常常用的一种提高性能的方法。而在java中&#xff0c;所谓缓存&#xff0c;就是将程序或系统经常要调用的对象存在内存中&#xff0c;再次调用时可以快速从内存中获取对象&#xff0c;不必再去创建新的重…

动手学习_动手选择值

动手学习由于冠状病毒的存在&#xff0c;可选的东西在空中&#xff0c;一切都变得可选&#xff0c;例如可选的公共聚会&#xff0c;可选的在家工作&#xff0c;可选的旅行等。 我现在是时候谈论处理NULL引用的软件工程中真正的“ 可选 ”了。 托尼霍尔&#xff08;Tony Hoare…

JVM菜鸟进阶高手之路

本文转载自公众号 匠心零度问题现象 代码如下&#xff0c;使用 ParNew Serial Old 回收器组合与使用 ParNew CMS 回收器组合时&#xff0c;结果为什么差异如此之大 &#xff1f;private static final int _1MB 1024 * 1024;public static void main(String[] args) throws …

事务的状态(状态模式)

【0】README0.1&#xff09;本文部分文字描述转自 “head first设计模式”&#xff0c;旨在学习 事务的状态&#xff08;状态模式&#xff09; 的基础知识&#xff1b;【1】应用场景一1.1&#xff09;还记得成都市各大高校内的米源自动售卖机吗&#xff1f;售卖机的主要制造商…

ogm neo4j_Neo4J OGM与Quarkus

ogm neo4j在下面的视频中&#xff0c;我演示了一个使用Neo4J数据库和Neo4J OGM的Quarkus应用程序示例。 看一下GitHub上的示例项目 。 我为咖啡豆创建了一个示例域&#xff0c;其中包含我们可以查询和匹配的某些风味配置文件。 红色节点是来自某个国家/地区的咖啡豆&#xff…

什么是ThreadLocal

本文转载自 占小狼的博客前言在面试环节中&#xff0c;考察"ThreadLocal"也是面试官的家常便饭&#xff0c;所以对它理解透彻&#xff0c;是非常有必要的. 有些面试官会开门见山的提问&#xff1a; “知道ThreadLocal吗&#xff1f;”“讲讲你对ThreadLocal的理解”…

Java bytecode instruction listings

【0】README 0.1&#xff09;these contents are shiped from https://en.wikipedia.org/wiki/Java_bytecode_instruction_listings Mnemonic Opcode (in hexadecimal) Opcode (in binary) Other bytes Stack [before]→[after] Description(no name)cb-fd these values ar…

为wmi执行例外_称之为例外?

为wmi执行例外虽然这是一个有关测试和Wiremock的Java示例&#xff0c;但它涉及一个更普遍的问题。 我们正在尝试重试Wiremock的verify方法&#xff0c;该方法可能会在我们要检查的端点被命中之前由测试调用。 在这种情况下&#xff0c;我们希望在几秒钟后循环尝试一次&#xf…

漫画:什么是MapReduce

转载自 脑洞有点大的 程序员小灰什么是MapReduce&#xff1f;MapReduce是一种编程模型&#xff0c;其理论来自Google公司发表的三篇论文&#xff08;MapReduce&#xff0c;BigTable&#xff0c;GFS&#xff09;之一&#xff0c;主要应用于海量数据的并行计算。MapReduce可以分…

orelse_可选的orElse vs orElseGet

orelseJava 8引入了一个很棒的Optional概念&#xff0c;我们在博客Java 8 Optional中进行了研究 。 因此&#xff0c;为了简要说明一下&#xff0c;Optional用于表示Optional对象或空值&#xff0c;而不是null引用。 这将有助于避免在我们尝试对空引用对象执行某些操作时发生空…