Mandrel 24.2.1.0-Final for JDK 24
Mandrel
Mandrel 24.2.1.0-Final is a downstream distribution of the GraalVM community edition.
Mandrel's main goal is to provide a native-image release specifically to support Quarkus.
The aim is to align the native-image capabilities from GraalVM with OpenJDK and Red Hat Enterprise Linux libraries to improve maintainability for native Quarkus applications.
How Does Mandrel Differ From Graal
Mandrel releases are built from a code base derived from the upstream GraalVM code base, with only minor changes but some significant exclusions.
They support the same native image capability as GraalVM with no significant changes to functionality.
They do not include support for Polyglot programming via the Truffle interpreter and compiler framework.
In consequence, it is not possible to extend Mandrel by downloading languages from the Truffle language catalogue.
Mandrel is also built slightly differently to GraalVM, using the standard OpenJDK project release of jdk 24.0.1+9.
This means it does not profit from a few small enhancements that Oracle have added to the version of OpenJDK used to build their own GraalVM downloads.
Most of these enhancements are to the JVMCI module that allows the Graal compiler to be run inside OpenJDK.
The others are small cosmetic changes to behaviour.
These enhancements may in some cases cause minor differences in the progress of native image generation.
They should not cause the resulting images themselves to execute in a noticeably different manner.
Prerequisites
Mandrel's native-image depends on the following packages:
- freetype-devel
- gcc
- glibc-devel
- libstdc++-static
- zlib-devel
On Fedora/CentOS/RHEL they can be installed with:
dnf install glibc-devel zlib-devel gcc freetype-devel libstdc++-staticNote: The package might be called glibc-static or libstdc++-devel instead of libstdc++-static depending on your system.
If the system is missing stdc++, gcc-c++ package is needed too.
On Ubuntu-like systems with:
apt install g++ zlib1g-dev libfreetype6-devQuick start Linux/MacOS
Mac users:
- Use artifact mandrel-java24-macos-aarch64-24.2.1.0-Final.tar.gz
- Use JAVA_HOME="$( pwd )/mandrel-java24-24.2.1.0-Final/Contents/Home"
- Use
xattr -c -r ./path/to/mandrelto prevent quarantine
$ curl -O -J -L "https://github.com/graalvm/mandrel/releases/download/mandrel-24.2.1.0-Final/mandrel-java24-linux-amd64-24.2.1.0-Final.tar.gz"
$ tar -xf mandrel-java24-linux-amd64-24.2.1.0-Final.tar.gz
$ export JAVA_HOME="$( pwd )/mandrel-java24-24.2.1.0-Final"
$ export GRAALVM_HOME="${JAVA_HOME}"
$ export PATH="${JAVA_HOME}/bin:${PATH}"
$ curl -O -J "https://code.quarkus.io/d?e=rest&cn=code.quarkus.io"
$ unzip code-with-quarkus.zip
$ cd code-with-quarkus/
$ ./mvnw package -Pnative
$ ./target/code-with-quarkus-1.0.0-SNAPSHOT-runner
Quick start Windows
Note that vcvars64 command is usually located in your VS installation and you should add it to your PATH,
e.g. C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build.
Known issue
One needs to append -Dquarkus.native.additional-build-args=-J-Djdk.console=jdk.base as per issue 43777.
powershell -c "Start-BitsTransfer -Source 'https://github.com/graalvm/mandrel/releases/download/mandrel-24.2.1.0-Final/mandrel-java24-windows-amd64-24.2.1.0-Final.zip'"
powershell -c "Expand-Archive -Path mandrel-java24-windows-amd64-24.2.1.0-Final.zip -DestinationPath . -Force"
SET JAVA_HOME=%CD%\mandrel-java24-24.2.1.0-Final
SET GRAALVM_HOME=%JAVA_HOME%
SET PATH=%JAVA_HOME%\bin;%PATH%
vcvars64
powershell -Command "Invoke-WebRequest -Uri 'https://code.quarkus.io/d?e=rest&cn=code.quarkus.io' -OutFile 'code-with-quarkus.zip'"
powershell -c "Expand-Archive -Path code-with-quarkus.zip -DestinationPath . -Force"
cd code-with-quarkus
mvnw package -Pnative -Dquarkus.native.additional-build-args=-J-Djdk.console=jdk.base
target\code-with-quarkus-1.0.0-SNAPSHOT-runner
Quarkus builder image
Mandrel Quarkus builder image can be used to build a Quarkus native Linux executable right away without any GRAALVM_HOME setup.
curl -O -J "https://code.quarkus.io/d?e=rest&cn=code.quarkus.io"
unzip code-with-quarkus.zip
cd code-with-quarkus
./mvnw package -Pnative -Dquarkus.native.container-build=true \
-Dquarkus.native.builder-image=quay.io/quarkus/ubi-quarkus-mandrel-builder-image:jdk-24 \
./target/code-with-quarkus-1.0.0-SNAPSHOT-runnerOne can use the builder image on Windows with e.g. Podman Desktop, see Podman For Windows.
powershell -c "Invoke-WebRequest -OutFile quarkus.zip -Uri https://code.quarkus.io/d?e=rest&cn=code.quarkus.io"
powershell -c "Expand-Archive -Path quarkus.zip -DestinationPath . -Force
cd code-with-quarkus
mvnw package -Pnative -Dquarkus.native.container-build=true -Dquarkus.native.builder-image=quay.io/quarkus/ubi-quarkus-mandrel-builder-image:jdk-24
podman build -f src/main/docker/Dockerfile.native -t my-quarkus-mandrel-app .
podman run -i --rm -p 8080:8080 my-quarkus-mandrel-appKnown issues
Native mode image processing (ImageIO, AWT)
Quarkus server-side headless image processing, enabled by the AWT extension (e.g., for PDF document processing), is not supported on Linux aarch64 when using GraalVM/Mandrel JDK 24. Support is restored with GraalVM/Mandrel for JDK 25. Linux amd64 is unaffected.
Any FFI/FFM dependency would fail on aarch64 architecture with this release.
Windows native: JLINE(JANSI)
One needs to append -Dquarkus.native.additional-build-args=-J-Djdk.console=jdk.base as per issue 43777.
Changelog
For a complete list of changes please visit mandrel-24.2.0.0-Final...mandrel-24.2.1.0-Final
Mandrel 24.2.1.0-Final
OpenJDK used: 24.0.1+9