Cross-platform JRE bundle creation under threat from JEP 493

2025-04-08
Posted by Ingo Kegel

One of the most valuable capabilities introduced with the Java module system in Java 9 is its support for creating custom runtime images with jlink. Developers can include only the modules they need, resulting in lightweight JRE bundles tailored to the requirements of their applications. Using the --module-path option, it has even been possible to generate those runtime images for different operating systems from a single host machine.

With Java 24, JEP 493 introduces a change that significantly impacts this workflow. JDK vendors can now configure builds without .jmod files, as jlink can optionally extract the required resources from the lib/modules jimage file. While this change reduces the size of the JDK by about 25%, it also removes critical support for cross-platform linking.

The impact on deployment workflows

Cross-platform linking is essential for developers who build installation packages or runtime bundles targeting multiple operating systems. Without .jmod files in the JDK, the --module-path option of the jlink tool can no longer be used to link bundles for another target platform. This is because binary resources like executables and native libraries are extracted from .jmod files. In the jmod-less mode, these resources can only be extracted from the current JDK.

This change affects tools such as install4j, the Badass Runtime Plugin, and Moditect, which rely on the availability of .jmod files to build minimal, cross-platform runtime images. Their functionality is either limited or entirely blocked when .jmod files are not available.

For example, in install4j, users can select a JDK provider to build platform-specific runtime bundles directly within the project configuration:

Blog figure

Later in the process, the media wizard allows developers to bundle additional modules that are needed for the target platform:

Blog figure

Current state across JDK distributions

Adoptium has adopted JEP 493 for Eclipse Temurin in full, and its Java 24 builds no longer include .jmod files. This decision aligns with the goals of the JEP. To their credit, the Adoptium team has been very transparent and responsive in community discussions, and a solution to provide .jmod files as a separate download is currently being discussed.

As of Java 24.0, JDK distributions such as Azul Zulu, Amazon Corretto, and BellSoft Liberica continue to provide .jmod files in their Java 24 builds, maintaining compatibility with existing tools and workflows. It is hoped that other JDK vendors adopting JEP 493 will also recognize that .jmod files still need to be provided one way or another.

Proposed solution

The simplest and most practical solution is to publish .jmod files as an optional artifact alongside the standard jmod-less builds. This would preserve support for deployment tooling without compromising the goals of JEP 493.

Maintaining .jmod builds ensures that developers have the flexibility to choose between minimized JDK distributions and full-featured ones that support cross-platform deployment.

Community feedback matters

If your build is affected by this change, it is important to share your experience. The Adoptium issue is open, and the maintainers are actively listening to feedback.

The ability to build platform-specific runtime images remains a crucial requirement for many real-world Java projects. Let’s ensure that continues to be possible.

Connect
Read with RSS
Subscribe by email
Follow on or
Blog Archive