这是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库
使用插件沙盒代码可@ compilerplugintest GitHub库
结论
始终收集有关构建的指标,例如编译所需的时间,测试所花费的时间,包大小,依赖项等。一旦开始进行测量,您将注意到构建的速度很慢,并且还需要与代码相同的爱好。
快速构建是实现连续交付的第一步。
翻译自: https://www.javacodegeeks.com/2020/03/incremental-build-with-maven.html