JEP 493: Linking Run-Time Images without JMODs

📌 What Is This JEP About?

JEP 493 simplifies the use of the jlink tool by allowing developers to create custom Java runtime images without needing .jmod files.


💡 Motivation

Before JEP 493, if you wanted to build a custom runtime image using jlink, you had to:

  • Compile your code as a modular JAR

  • Then generate a JMOD file using the jmod tool

  • Only then could you run jlink to create a runtime image

This made the process more complicated and redundant—especially in build pipelines or for library authors.


📦 What is a .jmod File?

A JMOD file is a format introduced with the Java Platform Module System in Java 9. It's:

  • A package format for compiled module artifacts

  • Contains .class files, native libs, configs, etc.

  • Used internally by the JDK for standard modules

Think of it like a fatter version of a JAR—but mostly useful for JDK developers, not application developers.


🛠️ Problem With JMODs

For most real-world modular applications:

  • You already build modular JARs

  • You rarely need native code or special packaging

  • Creating .jmod files adds unnecessary steps

  • Build systems like Maven and Gradle don't produce JMODs by default

This creates friction.


✅ What JEP 493 Changes

JEP 493 allows jlink to:

  • Accept modular JAR files directly

  • Skip the need for .jmod files altogether

  • Treat modular JARs and JMODs interchangeably as input to the module path

So now:

Modular JAR → jlink → Custom Runtime No intermediate .jmod step needed.


🚀 Benefits of JEP 493

Benefit
Explanation

🧹 Simpler Workflows

No need to generate .jmod files manually

⚙️ Tooling Compatibility

Works smoothly with Maven/Gradle outputs (modular JARs)

📦 CI/CD Friendly

Easier automation in pipelines

🧩 Modular Adoption Boost

Lowers the barrier to adopting Java modules

🧪 No Loss of Functionality

Native libraries and launchers still supported in other ways


📜 Summary

  • .jmod files are no longer required to link custom runtimes

  • jlink now accepts modular JARs directly

  • This improves developer experience, simplifies builds, and removes redundancy

  • JEP 493 is a quality-of-life improvement for modular Java projects

Last updated