jlink - assemble and optimize a set of modules and their dependencies into a custom runtime image
jlink [options] --module-path modulepath --add-modules module [, module...]
The jlink tool links a set of modules, along with their transitive dependences, to create a custom runtime image.
Note:
Developers are responsible for updating their custom runtime images.
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.
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:
#Wed Dec 07 00:40:19 EST 2016 --module-path mlib --add-modules com.greetings --output greetingsapp
Note:
Plug-ins not listed in this section aren't supported and are subject to change.
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:
For a complete list of all available plug-ins, run the command jlink --list-plugins.
An optional pattern-list filter can be specified to list the pattern of files to include.
Example:
--add-modules jdk.localedata --include-locales=en,ja,*-IN
Example:
--order-resources=/module-info.class,@classlist,/java.base/java/lang/
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.
jlink --module-path mlib --add-modules com.greetings --output greetingsapp
The following command lists the modules in the runtime image greetingsapp:
greetingsapp/bin/java --list-modules com.greetings java.base@11 java.logging@11 org.astro@1.0
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:
jlink --add-modules jdk.localedata --strip-debug --compress=2 --include-locales=fr --output compressedrt
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:
jlink --add-modules jdk.localedata --include-locales=fr --output fr_rt du -sh ./compressedrt ./fr_rt 23M ./compressedrt 36M ./fr_rt
The following example lists the providers that implement java.security.Provider:
jlink --suggest-providers java.security.Provider Suggested providers: java.naming provides java.security.Provider used by java.base java.security.jgss provides java.security.Provider used by java.base java.security.sasl provides java.security.Provider used by java.base java.smartcardio provides java.security.Provider used by java.base java.xml.crypto provides java.security.Provider used by java.base jdk.crypto.cryptoki provides java.security.Provider used by java.base jdk.crypto.ec provides java.security.Provider used by java.base jdk.crypto.mscapi provides java.security.Provider used by java.base jdk.security.jgss provides java.security.Provider used by java.base
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:
jlink --add-modules java.naming,jdk.crypto.cryptoki --output mybuild
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; see the Configuration.resolveAndBind method.
jlink --module-path mlib --add-modules com.greetings --output greetingsapp --bind-services
The following command lists the modules in the runtime image greetingsapp created by this command:
greetingsapp/bin/java --list-modules com.greetings java.base@11 java.compiler@11 java.datatransfer@11 java.desktop@11 java.logging@11 java.management@11 java.management.rmi@11 java.naming@11 java.prefs@11 java.rmi@11 java.security.jgss@11 java.security.sasl@11 java.smartcardio@11 java.xml@11 java.xml.crypto@11 jdk.accessibility@11 jdk.charsets@11 jdk.compiler@11 jdk.crypto.cryptoki@11 jdk.crypto.ec@11 jdk.crypto.mscapi@11 jdk.internal.opt@11 jdk.jartool@11 jdk.javadoc@11 jdk.jdeps@11 jdk.jfr@11 jdk.jlink@11 jdk.localedata@11 jdk.management@11 jdk.management.jfr@11 jdk.naming.dns@11 jdk.naming.rmi@11 jdk.security.auth@11 jdk.security.jgss@11 jdk.zipfs@11 org.astro@1.0