2020-06-12 13:11:56 +02:00
2020-06-12 13:11:56 +02:00
2020-06-12 13:11:56 +02:00
2020-06-04 11:37:38 +02:00
2020-03-08 13:23:19 +01:00
2019-09-30 16:57:52 +02:00
2020-05-28 19:08:30 +02:00
2020-05-28 19:08:30 +02:00
2019-10-01 16:18:00 +02:00
2020-06-12 13:11:56 +02:00

= mvnd: Maven Daemon

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.

== Building

[source,shell]
----
git clone https://github.com/gnodet/mvnd.git
cd mvnd
mvn package
----

== Configuring

[source,shell]
----
export PATH=[mvnd-source-root]/daemon/target/maven-distro/bin:$PATH
----

== Usage

[source,shell]
----
mvnd install
----

== Native `mvnd` client

Prerequisites:

* Download and unpack GraalVM CE from https://github.com/graalvm/graalvm-ce-builds/releases[GitHub]
* Set `JAVA_HOME` to where you unpacked GraalVM in the previous step. Check that `java -version` output is as
  expected:
+
[source,shell]
----
$ $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:
+
[source,shell]
----
$ $JAVA_HOME/bin/gu install native-image
----

* `native-image` may require additional software to be installed depending on your platform - see the
https://www.graalvm.org/docs/reference-manual/native-image/#prerequisites[`native-image` documentation].

Build the native mvnd client

[source,shell]
----
$ cd mvnd/client
$ mvn clean package -Pnative
...
$ 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 14M Jun  2 13:23 target/mvnd
----

Install the native `mvnd` client (`mvnd.exe` on Windows):

* Add the `target/mvnd` binary to `PATH` or copy it to `~/bin` or some other location already included in `PATH`
* Take care that the `mvnd` binary has a higher precendence than the `mvnd` shell script in the `bin` directory of
  the Maven Daemon distribution.
* Create `~/.m2/mvnd.properties` with the following content:
+
[source,properties]
----
# An absolute path to your Maven Daemon installation
maven.home = [mvnd-source-root]/mvnd/daemon/target/maven-distro
# java.home is optional if you have JAVA_HOME environment variable set
# This is for running the mvnd server, hence a stock non-GraalVM JDK is enough.
java.home = ...
----

Make sure the native `mvnd` client works:

[source,shell]
----
$ mvnd --version
Maven Daemon 0.1-SNAPSHOT (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"
----

You sould see `(native)` in the first line of the output

This project is still in prototype mode, so feedback is most welcomed!
Description
Apache Maven Daemon
Readme 16 MiB
Languages
Java 92.9%
Shell 4.4%
C 1.5%
Makefile 1.1%
Groovy 0.1%