mvnd来了

简单粗暴:maven的升级版本 mvnd

介绍

该项目旨在使用 Gradle 和 Takari 已知的技术提供更快的Maven构建。

架构概述:

  • mvnd 嵌入了Maven(所以不需要单独安装Maven)。

  • 实际的构建发生在一个长期存在的后台进程中,也就是守护进程。

  • 一个守护进程实例可以为来自mvnd客户端的多个连续请求提供服务。

  • mvnd客户端是使用内置本地可执行GraalVM。与启动传统 JVM 相比,它启动速度更快,使用的内存更少。

  • 如果没有空闲守护程序来处理构建请求,则可以并行生成多个守护程序。

这种架构带来了以下优势:

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

  • 持有 Maven 插件类的类加载器缓存在多个构建中。因此,插件 jars 只被读取和解析一次。SNAPSHOT 版本的 Maven 插件不会被缓存。

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

附加功能

mvnd 在库存 Maven 之上带来以下功能:

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

  • 改进的控制台输出:我们认为在股票 Maven 上并行构建的输出很难理解。因此,我们实现了一个简化的非滚动视图,在单独的行上显示每个构建线程的状态。这是在具有 24 个内核的机器上的样子:

    103917178 94ee4500 510d 11eb 9abb f52dae58a544

    • 构建完成后,完整的 Maven 输出将转发到控制台。

如何安装 mvnd

使用SDKMAN安装

如果 SDKMAN!支持您的操作系统,就这么简单

$ sdk 安装 mvnd

如果您过去使用手动安装,请确保设置~/.m2/mvnd.properties仍然有效。随着SDKMAN!上~/.m2/mvnd.properties通常没有必要的文件,因为两者JAVA_HOME并 MVND_HOME用SDKMAN的管理!

使用Homebrew安装

$ brew install mvndaemon/homebrew-mvnd/mvnd

使用MacPorts安装

$ sudo 端口安装 mvnd

使用Chocolatey安装

$ choco 安装 mvndaemon

设置完成

或者,您可以按如下方式设置完成:

#确保将 MVND_HOME 设置为指向您的 mvnd 发行版,请注意 sdkman 会为您执行此操作
$ echo  ' source $MVND_HOME/bin/mvnd-bash-completion.bash '  >>  ~ /.bashrc

bash 是目前唯一支持的 shell。

oh-my-zsh 用户注意事项

使用的用户oh-my-zsh经常使用maven的补全。默认的 maven 完成插件定义mvndmvn deploy. 因此,在能够使用之前mvnd,您需要使用以下命令取消别名:

$ unalias mvnd

手动安装

  • https://github.com/mvndaemon/mvnd/releases下载适合您平台的最新 ZIP

  • 解压到您选择的目录

  • bin目录添加到PATH

  • 或者,您可以创建~/.m2/mvnd.properties和设置java.home属性,以防您不想设置JAVA_HOME环境变量。

  • 测试是否mvnd有效:

    $ mvnd --version
    Maven 守护进程 0.0.11-linux-amd64(本机)
    终端:org.jline.terminal.impl.PosixSysTerminal with pty org.jline.terminal.impl.jansi.osx.OsXNativePty
    Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
    Maven 主页:/home/ppalaga/orgs/mvnd/mvnd/daemon/target/maven-distro
    Java 版本:11.0.1,供应商:AdoptOpenJDK,运行时:/home/data/jvm/adopt-openjdk/jdk-11.0.1+13
    默认语言环境:en_IE,平台编码:UTF-8
    操作系统名称:“ linux ”,版本:“ 5.6.13-200.fc31.x86_64 ”,arch:“ amd64 ”,系列:“ unix ”

    如果您使用的是 Windows 并看到一条消息VCRUNTIME140.dll was not found,您需要vc_redist.x64.exeLatest supported Visual C++ Redistributable downloads | Microsoft Docs进行安装 。有关更多信息,请参阅How to include msvcr100.dll in Windows native image · Issue #1762 · oracle/graal · GitHub

用法

mvnd旨在接受相同的命令行选项,如股票mvn(加上一些额外的 - 见下文),例如:

mvnd 全新安装

mvnd 具体选项

--status 列出正在运行的守护进程

--stop 杀死所有正在运行的守护进程

执行时会打印完整的选项列表mvnd --help

配置

可以通过属性文件提供配置。Mvnd 从以下位置读取属性文件:

  • 使用MVND_PROPERTIES_PATH环境变量或mvnd.propertiesPath系统变量提供的属性路径

  • 本地属性路径位于 [PROJECT_HOME]/.mvn/mvnd.properties

  • 用户属性路径位于: [USER_HOME]/.m2/mvnd.properties

  • 系统属性路径位于: [MVND_HOME]/conf/mvnd.properties

在第一个文件中定义的属性将优先于在较低级别文件中指定的属性。

一些特殊属性不遵循上述机制:

  • mvnd.daemonStorage:此属性定义了 mvnd 存储其文件(注册表和守护进程日志)的位置。该属性只能在命令行中定义为系统属性

  • mvnd.id: 此属性在内部用于标识正在创建的守护进程

  • mvnd.extClasspath: 指定 maven 扩展类路径的内部选项

  • mvnd.coreExtensions: 指定要注册的 Maven 扩展列表的内部选项

有关可用属性的完整列表,请参阅 /dist/src/main/distro/conf/mvnd.properties

mvnd从源代码构建

先决条件:

  • git

  • 马文

  • GitHub下载并解压 GraalVM CE

  • 设置JAVA_HOME为您在上一步中解压 GraalVM 的位置。检查java -version输出是否符合预期:

    $ $JAVA_HOME /bin/java -version
    openjdk 版本“ 11.0.9 ” 2020-10-20
    OpenJDK 运行时环境 GraalVM CE 20.3.0(构建 11.0.9+10-jvmci-20.3-b06)
    OpenJDK 64-Bit Server VM GraalVM CE 20.3.0(build 11.0.9+10-jvmci-20.3-b06,混合模式,共享)
  • 安装native-image工具:

    $ $JAVA_HOME /bin/gu 安装本机映像
  • native-image根据您的平台,可能需要安装其他软件 - 请参阅 native-image文档

建造 mvnd

$ git clone https://github.com/mvndaemon/mvnd.git
$ cd mvnd
$ mvn clean verify -Pnative
...
$ cd客户端
$文件目标/mvnd
目标/ mvnd:ELF 64位LSB的可执行文件,X86-64,版本1(SYSV),动态链接的,解释器/lib64/ld-linux-x86-64.so.2,BuildID [SHA1] = 93a554f3807550a13c986d2af9a311ef299bdc5a,用于GNU / Linux 3.2.0,带有 debug_info,未剥离
$ ls -lh 目标/mvnd
-rwxrwxr-x。1 ppalaga ppalaga 25M Jun 2 13:23 target/mvnd

安装 mvnd

$ cp -R dist/target/mvnd-[版本] [目标目录]

然后你可以简单地运行 add [target-dir]/binto your PATHand run mvnd

参考文档: https://github.com/apache/maven-mvnd

Takari(Maven生命周期优化器):  http://takari.io/book/40-lifecycle.html

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

mvnd发行版仓库: https://github.com/mvndaemon/mvnd/releases

mvnd配置:https://github.com/mvndaemon/mvnd/blob/master/dist/src/main/distro/conf/mvnd.propertie

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值