The mvnd project aims to provide a daemon infrastructure for maven based builds. It borrows techniques from Gradle and Takari to provide a simple and efficient system.
-
Download the latest ZIP suitable for your platform from https://github.com/mvndaemon/mvnd/releases
-
Unzip to a directory of your choice
-
Add the
bin
directory toPATH
-
Optionally, you can create
~/.m2/mvnd.properties
and set thejava.home
property in case you do not want to bother with settingJAVA_HOME
environment variable. -
Test whether
mvnd
works:$ mvnd --version Maven Daemon 0.0.0 (native) Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f) Maven home: /home/ppalaga/orgs/mvnd/mvnd/daemon/target/maven-distro Java version: 11.0.1, vendor: AdoptOpenJDK, runtime: /home/data/jvm/adopt-openjdk/jdk-11.0.1+13 Default locale: en_IE, platform encoding: UTF-8 OS name: "linux", version: "5.6.13-200.fc31.x86_64", arch: "amd64", family: "unix"
If you are on Windows and see a message that
VCRUNTIME140.dll was not found
, you need to installvc_redist.x64.exe
from https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads. See oracle/graal#1762 for more information.
mvnd
is designed to accept the same command line options like stock mvn
(plus some extras - see below), e.g.:
mvnd clean install
-
git
-
Maven
-
Download and unpack GraalVM CE from GitHub
-
Set
JAVA_HOME
to where you unpacked GraalVM in the previous step. Check thatjava -version
output is as expected:$ $JAVA_HOME/bin/java -version openjdk version "11.0.7" 2020-04-14 OpenJDK Runtime Environment GraalVM CE 20.1.0 (build 11.0.7+10-jvmci-20.1-b02) OpenJDK 64-Bit Server VM GraalVM CE 20.1.0 (build 11.0.7+10-jvmci-20.1-b02, mixed mode, sharing)
-
Install the
native-image
tool:$ $JAVA_HOME/bin/gu install native-image
-
native-image
may require additional software to be installed depending on your platform - see thenative-image
documentation.
$ git clone https://github.com/mvndaemon/mvnd.git
$ cd mvnd
$ mvn clean verify -Pnative
...
$ cd client
$ file target/mvnd
target/mvnd: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=93a554f3807550a13c986d2af9a311ef299bdc5a, for GNU/Linux 3.2.0, with debug_info, not stripped
$ ls -lh target/mvnd
-rwxrwxr-x. 1 ppalaga ppalaga 25M Jun 2 13:23 target/mvnd
This project is still in prototype mode, so feedback is most welcomed!