Jlink - Assemble and Optimize a Set of Modules
Introducing jlink
jlink - assemble and optimize a set of modules, and their dependencies into a custom runtime image. This article gives a reference, for a tutorial on how to use it in practice, see here.
Synopsis
options
Command-line options separated by spaces. See jlink Options.
modulepath
The path where the jlink tool discovers observable modules. These modules can be modular JAR files, JMOD files, or exploded modules.
module
The names of the modules to add to the runtime image. The jlink tool adds these modules and their transitive dependencies.
Description
The jlink tool links a set of modules, along with their transitive dependencies, to create a custom runtime image.
--add-modules mod[, mod...]
Adds the named modules, mod, to the default set of root modules. The default set of root modules is empty.
--bind-services
Link service provider modules and their dependencies.
--compress=zip-[0-9]
Configure the compression of the image, the higher the value the greater the compression. Example compression levels:
zip-0: No compressionzip-1: Fastest compressionzip-6: Defaultzip-9: Maximum compression
--endian {little|big}
Specifies the byte order of the generated image. The default value is the format of your system's architecture.
-h or --help
Prints the help message.
--ignore-signing-information
Suppresses a fatal error when signed modular JARs are linked in the runtime image. The signature-related files of the signed modular JARs aren’t copied to the runtime image.
--launcher command=module or --launcher command=module/main
Specifies the launcher command name for the module or the command name for the module and main class (the module, and the main class names are separated by a slash /).
--limit-modules mod[, mod...]
Limits the universe of observable modules to those in the transitive closure of the named modules, mod, plus the main module, if any, plus any further modules specified in the --add-modules option.
--list-plugins
Lists available plug-ins, which you can access through command-line options. See jlink Plug-ins.
-p or --module-path modulepath
Specifies the module path.
If this option is not specified, then the default module path is $JAVA_HOME/jmods. This directory contains the java.base module and the other standard and JDK modules.
If this option is specified but the java.base module cannot be resolved from it, then the jlink command appends $JAVA_HOME/jmods to the module path.
--no-header-files
Excludes header files.
--no-man-pages
Excludes man pages.
--output path
Specifies the location of the generated runtime image.
--save-opts filename
Saves jlink options in the specified file.
--suggest-providers [name, ...]
Suggest providers that implement the given service types from the module path.
--version
Prints version information.
@filename
Reads options from the specified file.
An options file is a text file that contains the options and values that you would typically enter in a command prompt.
Options may appear on one line or on several lines. You may not specify environment variables for path names.
You may comment out lines by prefixing a hash symbol # to the beginning of the line.
The following is an example of an options file for the jlink command:
Options
For plug-in options that require a pattern-list, the value is a comma-separated list of elements, with each element using one the following forms:
- glob-pattern
- glob:glob-pattern
- regex:regex-pattern
- @filename
- filename is the name of a file that contains patterns to be used, one pattern per line.
Plugins
For a complete list of all available plug-ins, run the command jlink --list-plugins.
compress Options:
Description:
include-locales Options:
Description:
Example:
order-resources
Options:
Description:
Example:
strip-debug
Options:
Description:
Examples
The following command creates a runtime image in the directory greetingsapp. This command links the module com.greetings, whose module definition is contained in the directory mlib.
The following command lists the modules in the runtime image greetingsapp:
The following command creates a runtime image in the directory compressedrt that’s stripped of debug symbols, uses compression to reduce space, and includes French language locale information:
The following example compares the size of the runtime image compressedrt with fr_rt, which isn’t stripped of debug symbols and doesn’t use compression:
The following example lists the providers that implement java.security.Provider:
The following example creates a custom runtime image named mybuild that includes only java.naming and jdk.crypto.cryptoki and their dependencies but no other providers.
Note that these dependencies must exist in the module path:
The following command is similar to the one that creates a runtime image named greetingsapp,
except that it will link the modules resolved from root modules with service binding:
The following command lists the modules in the runtime image greetingsapp created by this command:
More Learning
Last update: September 14, 2021