Self-Contained Applications, built in Java

jlink

Yes, this is possible with jlink (JEP 282), but all of your code and your dependencies need to be modular JARs (i.e. ones with module-info.class). It works like this:

jlink
    --module-path $JAVA_HOME/jmods:mods
    --add-modules your.app
    --launcher launch-app=your.app
    --output your-app-image

In detail:

  • --module-path lists the folders that contain modules – this needs to include the platform modules shipped with the JDK you want to use (in $JAVA_HOME/jmods) and your application modules (mods)
  • --add-modules names the module(s) that you want your runtime image to contain – all of its (their) transitive dependencies are included
  • --launcher is optional, but very handy; it creates an OS-specific launcher (e.g. a .bat on Windows) with the given name (launch-app) that launches the specified module (your.app; in this case assuming the main class is defined for it)
  • --output specifies where to create the runtime image

Leave a Comment