即将取代Maven和Gradle的新一代更强更快的构建工具(至尊典藏版)

 

目录

前言

1、介绍

2、安装

3、使用

3.1. 从GitHub下载压缩包

3.2. 解压并配置环境变量

3.3.测试

4、总结


前言

大家好,我是程序缘--幻羽,我又来了!!

Maven和Gradle都是我们程序猿们日常开发必不可少的构建工具。

Apache Maven是一个(特别是Java编程)项目管理及自动构建工具,由Apache软件基金会所提供。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。

它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。

Maven 有一个生命周期,当你运行 mvn install 的时候被调用。这条命令告诉 Maven 执行一系列的有序的步骤,直到到达你指定的生命周期。遍历生命周期旅途中的一个影响就是,Maven 运行了许多默认的插件目标,这些目标完成了像编译和创建一个 JAR 文件这样的工作。

Gradle是一个基于Apache AntApache Maven概念的项目自动化构建开源工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,也增加了基于Kotlin语言的kotlin-based DSL,抛弃了基于XML的各种繁琐配置。是一款通用灵活的构建工具,支持maven, Ivy仓库,支持传递性依赖管理,而不需要远程仓库或者是pom.xml和ivy.xml配置文件,基于Groovy,build脚本使用Groovy编写。

gradle和maven都可以作为java程序的构建工具,但两者还是有很大的不同之处的:1.可扩展性,gradle比较灵活,maven的灵活性就差一些,但是maven的项目比较容易看懂,并且上手简单。2.性能比较,gradle比maven运行得快。gradle无论是在可扩展性还是在性能方面都优于maven。

相信作为Java开发者的你早已经受够了maven的编译缓慢,但是又由于历史包袱、使用习惯等问题暂时切换不了其他更快的构建工具,这里介绍一款更快的maven——maven-mvnd

 

 

1、介绍

maven-mvnd是Apache Maven团队借鉴了Gradle和Takari后衍生出的更快的构建工具。mvnd内嵌了Maven,也正是因为这个原因我们可以无缝地将Maven切换为mvnd(也不需要单独安装Maven)。

在设计上,在mvnd中会生成一个或多个的守护进程来服务构建请求以此来达到并行构建的效果。另外在VM的选择上,mvnd使用了GraalVM来代替传统的JVM,与之相比GraalVM启动速度更快,占用的内存更少。

根据文档描述,与传统的Maven相比mvnd具有以下优势:

  • 运行构建的JVM不需要为每个构建重新启动。

  • Maven插件类的类加载器缓存在多个构建中,插件jars只会被读取和解析一次。

  • JVM中JIT生成的本机代码会被保留。与Maven相比,JIT编译花费的时间更少。在重复构建期间,JIT优化的代码立即可用。这不仅适用于来自Maven插件和Maven内核的代码,也适用于来自JDK本身的所有代码。

默认情况下,mvnd使用多个CPU内核并行构建模块。使用的内核数由公式Math.max(Runtime.getRuntime().availableProcessors() - 1, 1)给出。如果您的源代码树不支持并行构建,请在命令行上传递-T1以使您的构建串行。

同时官方给出了24核机器上运行的动态图:

2、安装

对于mvnd的安装,官方文档给了十分详细的教程,建议先行阅读:https://github.com/apache/maven-mvnd 。

小编是通过Homebrew进行安装的,实践证明macOS m1安装使用是没有问题的。不过需要注意的是通过此种方式安装的mvnd版本为0.7.1,而经过在ubuntu和macOS m1上进行测试发现此版本并不支持JDK8(可能仅是笔者电脑问题),而通过官方例子所示的JDK11确是没问题。在JDK8运行mvnd命令会产生以下错误:

~ % mvnd -v
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/mvndaemon/mvnd/client/DefaultClient has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:757)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:473)
at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
at java.lang.ClassLoader.loadClass(ClassLoader.java:419)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
at java.lang.ClassLoader.loadClass(ClassLoader.java:352)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:601)

 居然报错了,我真的是崩溃,说真的我真的好难过啊!!!!!

预估应该是这种方式下载的执行文件是通过高版本的JDK编译的,在低版本上运行因为缺少某些方法或特性所以运行不了。在一筹莫展之际,笔者从maven-mvnd的最新版本的更新说明上发现一个Closed issues:Different java versions for mvnd and maven #512,在该问题上作者提供了一种解决方案就是将JAVA_HOME所指定的版本设置为JDK11,并且在运行mvnd命令时加上参数-Dmaven.compiler.release=8,即

mvnd -Dmaven.compiler.release=8 compile

 通过这种方式即能生成出JDK8所对应的编译代码。

对于issue #512中作者回应mvnd的最低支持版本是JDK8,但是笔者从0.5.2开始尝试还是报同样的错...或许是笔者电脑存在一定的问题,因为我看到其他人在贴出的结果图显示JDK8下最新版本也是能够安装并使用的。另外如果还是不行的话也许我们能够通过手动编译源码来生成可执行文件,具体步骤在官方readme上已经给出相应的步骤。

3、使用

在使用上与Maven的用法是完全相同的,只需将命令mvn改为mvnd即可。而在笔者本机的实测中,与传统的Maven相比,通过mvnd的构建所耗费的时间是原来的1/2。

3.1. 从GitHub下载压缩包

访问仓库版本地址,Releases · apache/maven-mvnd · GitHub

如下所示

 点击对应开发环境的版本进行下载即可
小编这边时window系统,下载 mvnd-0.7.1-windows-amd64.zip 版本。

3.2. 解压并配置环境变量


1、把下载的压缩包解压后,配置 环境变量

mvndbin目录配置到环境变量path

2、解压后修改配置文件,修改conf/mvnd.properties

拉到底部修改settings文件目录,可以指向原安装maven中的xml文件,也可单独放到一个目录中。

3、环境变量配置完成,在 cmd 的任意地址,可以识别到 bin 下的 mvnd 命令输入 mvnd -version 查看版本信息

mvnd -version

 输出如下信息代表安装成功!

C:\WINDOWS\system32>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: D:\Code\mvnd-0.7.1-windows-amd64\mvn
Java version: 1.8.0_102, vendor: Oracle Corporation, runtime: D:\JAVA\jdk\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

3.3.测试

以多模块复杂项目在Windows构建为例。
默认情况下,mvnd使用多个 CPU 内核并行构建模块,如果该项目不支持并行构建,可以增加-T1参数进行串行构建。

  • maven构建
# 执行maven命令开始构建
mvn clean -U -Dmaven.test.skip=true package

# 最终结果
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  05:14 min
[INFO] Finished at: 2022-01-18T11:28:46+08:00
[INFO] ------------------------------------------------------------------------
  • mvnd构建(并行)
# 执行maven-mvnd命令开始构建
mvnd clean -U -Dmaven.test.skip=true package

# 最终结果
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  01:45 min (Wall Clock)
[INFO] Finished at: 2022-01-18T11:31:19+08:00
[INFO] ------------------------------------------------------------------------
  • mvnd构建(串行)
# 执行maven-mvnd命令开始构建
mvnd clean -U -Dmaven.test.skip=true package -T1

# 最终结果
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  04:51 min
[INFO] Finished at: 2022-01-18T11:39:17+08:00
[INFO] ------------------------------------------------------------------------

 

4、总结

本文笔者分别从maven-mvnd的介绍、安装、使用及其出现的一些异常情况展开陈述,如果读者想知道更多细节可阅读官方文档。而也许强化后的Maven依然比不过Gradle,但是在历史包袱、使用习惯等背景下Maven的这次强化还是很香的。

参考:

https://github.com/apache/maven-mvnd

https://github.com/apache/maven-mvnd/issues/512

https://mp.weixin.qq.com/s/TG_6vq0mgbej8F3Qvpb6Vw

 

 只有当你开始,你才会到达你的理想和目的地,只有当你努力,
你才会获得辉煌的成功,只有当你播种,你才会有所收获。只有追求,
才能尝到成功的味道,坚持在昨天叫立足,坚持在今天叫进取,坚持在明天叫成功。欢迎所有小伙伴们点赞+收藏!!!

相信通过本文的学习,你应该会对 maven-mvnd高性能构建插件有一个全面的认识。

都看到这里了,就点个👍 👍 👍 吧。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值