比Maven更快mvnd - Maven来了

目录

​介绍

附加功能

如何安装 mvnd

使用SDKMAN安装!

使用Homebrew安装

使用MacPorts安装

使用Chocolatey安装

设置完成

oh-my-zsh 用户注意事项

手动安装

用法

mvnd 具体选项

配置

mvnd从源代码构建

mvnd源码

先决条件:

建造 mvnd

安装 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 个内核的机器上的样子:

构建完成后,完整的 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 完成插件定义mvnd为mvn 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.exe从https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads进行安装 。有关更多信息,请参阅https://github.com/oracle/graal/issues/1762。

用法


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从源代码构建

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。

你可能感兴趣的:(maven,java,开发语言)