乐趣区

关于java:更快的Maven来了

Maven常常被拿来和 Gradle 做比照,最大的劣势之一就是 Maven 构建慢,GradleMaven 构建速度快 2 到 10 倍,而现在 Maven 也能够更快了。Apache Maven团队从 Gradle 和 Takari(Maven 生命周期优化器)中取得灵感对 Maven 进行了强化,衍生出 maven-mvnd 我的项目,明天胖哥带你来尝尝鲜。

简略介绍

mvnd并不是对 Maven 进行了重构,而是内置了 Maven。它实际上是一个或者多个 Maven 守护过程,用来执行理论的构建服务。一个守护过程实例能够为来自mvnd 客户端的多个间断申请提供 Maven 构建服务。当没有闲暇的守护过程时来撑持构建申请时,mvnd能够并行生成多个守护程序。

应用 GraalVM 代替 JVM

mvnd之所以快是因为它应用了 GraalVM 代替了传统的 JVM,因而它启动更快,占用内存更少,而且在履行构建时不须要为每个构建启动新的JVM。另外Maven 插件在构建时不再须要屡次加载,而是缓存在多个构建中。SNAPSHOT版本的 Maven 插件不会被缓存。

反对 JIT

GraalVMJIT(Just In Time) 实时编译个性也被使用到 Maven 构建作业中。JIT能够大大降低编译工夫,在反复构建过程中,JIT优化代码立刻可用,也极大进步了构建效率。

并行构建

目前 Maven 3 的并行构建(parallel builds)还是试验个性,而且要求应用的插件必须是线程平安的。而 mvnd 默认就反对应用多个 CPU 内核进行并行构建。当然如果你的源代码不反对并行构建,也能够通过增加- T1 参数切换到串行构建。

简略尝试

接下来简略尝试一下mvnd

装置

目前 mvnd 曾经反对 LinuxMacOSWindows 平台。你能够别离通过 SDKMANHomebrewChocolatey 这些包管理器进行装置。也能够间接去 mvnd 发行版仓库下载对应的二进制进行装置。这里以 Windows 为例,我抉择 Chocolatey 装置:

choco install mvndaemon

工夫可能比拟长一些。

配置

配置很简略,只须要留神两点

  • 如果不应用包管理器进行装置的话请确保 mvndbin目录关联到PATH
  • 如果没有配置或者不想配置 JAVA_HOME 环境变量的话请在 ~/.m2/mvnd.properties 中设置 java.home 以指定 Java 目录,例如:java.home=C:\\AdoptOpenJDK\\jdk-8。曾经配置环境变量的请疏忽该条。

其它的配置项可参考 mvnd 配置。

应用

装置配置结束后命令行执行 mvnd --version 呈现下列后果就示意装置胜利了。

mvnd --version
mvnd native client 0.7.1-windows-amd64 (97c587c11383a67b5bd0ff8388bd94c694b91c1e)
Terminal: org.jline.terminal.impl.jansi.win.JansiWinSysTerminal
Apache Maven 3.8.3 (ff8e977a158738155dc465c6a97ffaf31982d739)
Maven home: C:\Program Files\mvndaemon\mvnd-0.7.1-windows-amd64\mvn
Java version: 1.8.0_282, vendor: AdoptOpenJDK, runtime: C:\Program Files\AdoptOpenJDK\jdk-8.0.282.8-hotspot\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

为了升高学习老本 mvnd 的形式和传统 Maven 相似,mvn变成了 mvnd,你也能够通过mvnd --help 来查看残缺的命令选项清单。

说实话并行构建就是快,几乎坐火箭个别。另外,控制台输入也优化了。

因为 GraalVM 的加持,这个工具很可能会缩短 Maven 的生命,防止过早被 Gradle 拉开劣势。对于咱们来说,这个我的项目能够张望一下,看看 Apache Maven 官网的进一步动作。

关注公众号:Felordcn 获取更多资讯

集体博客:https://felord.cn

退出移动版