Since Apache Ant 1.10.6
Assembles jmod files into an executable image. Equivalent to the JDK's jlink tool.
Requires Java 9 or later.
Attribute | Description | Required |
---|---|---|
destDir | Root directory of created image. | Yes |
modulepath | Path-like sequence of jmod files to link in order to create image. | One of these is required, unless a nested
<modulepath> is present. |
modulepathref | Path-like sequence of jmod files to link in order to create image, given as a reference to a path defined elsewhere. | |
modules | Comma-separated list of modules to place in the linked image. | Yes, unless one or more nested <module> elements
are present. |
observableModules | Comma-separated list of explicit modules that comprise "universe" visible to link tool while linking. | No |
launchers | Comma-separated list of commands, each of the form
name= module or
name= module/ mainclass |
No |
locales | Comma-separated list of extra locales, or wildcard patterns matching
multiple locale names, to include.
Requires jdk.localedata module. |
No |
excludeResources | Comma-separated list of patterns specifying resources to exclude
from source jmods. Each is either a
standard PathMatcher pattern
or @ filename, indicating a text file with
one resource name per line. |
No |
excludeFiles | Comma-separated list of patterns specifying files to exclude
from linked image. Each is either a
standard PathMatcher pattern
or @ filename, indicating a text file with
one file name per line. |
No |
resourceOrder | Comma-separated list of patterns specifying resource search order.
Each is either a
standard PathMatcher pattern
or @ filename, indicating a text file with
one resource name per line. |
No |
bindServices | Boolean, whether to include in linked image any service providers found in module path corresponding to service provider interfaces used by explicitly linked modules. | No, default is false |
ignoreSigning | Boolean, whether to allow signed jar files. (Note: As of Java 11, this is ignored and is always treated as true.) | No, default is false |
includeHeaders | Boolean, whether to include header files in linked image. | No, default is true |
includeManPages | Boolean, whether to include man pages in linked image. | No, default is true |
includeNativeCommands | Boolean, whether to include native executables in linked image. | No, default is true |
debug | Boolean, whether to include debug information. | No, default is true |
verboseLevel | If set, the linker will produce verbose output, which will be logged at
the specified Ant log level (DEBUG , VERBOSE ,
INFO , WARN , or ERR ). |
No, default is no verbose output |
compress | Compression level of linked image. One of:
|
No, default is no compression |
endianness | Byte order of linked image, must be little or big
| No, default is native byte order |
checkDuplicateLegal | Boolean. When merging legal notices from different modules because they have the same name, verify that their contents are identical. | No, default is false, which means any license files with the same name are assumed to have the same content, and no checking is done. |
vmType | Hotspot VM in image. One of:
|
No, default is all |
<link>
can have the following nested elements:
Path-like structure pointing to jmod files to link into image.
Names a single module to be placed in the linked image. This may be specified multiple times.
Attributes:
Attribute | Description | Required |
---|---|---|
name | Name of module to add. | Yes |
Names a module visible to the linking process, instead of every module in the module path being considered. This may be specified multiple times.
Attributes:
Attribute | Description | Required |
---|---|---|
name | Name of module to add to list of observable modules. | Yes |
Specifies an executable file which will be added to the linked image, which executes a particular module's main class. Attributes:
Attribute | Description | Required |
---|---|---|
name | Name of launcher. This typically is used for the name of the executable file. | Yes |
module | Name of module to execute. | Yes |
mainClass | Name of entry point class in module to execute. | Required unless module has its own main class defined. |
Specifies locales to include in linked image. May be specified multiple
times. Requires jdk.localedata
module. Attributes:
Attribute | Description | Required |
---|---|---|
name | Name of locale, or wildcard pattern with
that matches multiple locale names. |
Yes |
Explicit resource search order in linked image. May be specified multiple times. Attributes:
Attribute | Description | Required |
---|---|---|
pattern | A standard PathMatcher pattern for matching resources | Exactly one of these |
listFile | Text file containing list of resource names (not patterns), one per line |
If the resourceOrder
attribute is also present on the task, its
patterns are treated as if they occur before patterns in nested
elements.
Excludes files from linked image tree. May be specified multiple times. Attributes:
Attribute | Description | Required |
---|---|---|
pattern | A standard PathMatcher pattern for matching resources | Exactly one of these |
listFile | Text file containing list of resource names (not patterns), one per line |
Excludes files from linked image. May be specified multiple times. Attributes:
Attribute | Description | Required |
---|---|---|
pattern | A standard PathMatcher pattern for matching files | Exactly one of these |
listFile | Text file containing list of file names (not patterns), one per line |
Describes how image should be compressed. Attributes:
Attribute | Description | Required |
---|---|---|
level | Compression level of linked image. One of:
|
Yes |
files | Comma-separated list of patterns matching files to compress.
Each pattern either a
standard PathMatcher pattern
or @ filename, indicating a text file with
one file name per line. |
No |
<compress>
can also have any number of nested
<files>
elements, with these attributes:
Attribute | Description | Required |
---|---|---|
pattern | A standard PathMatcher pattern for matching files | Exactly one of these |
listFile | Text file containing list of file names (not patterns), one per line |
Replaces, augments, or trims the image's release info properties. Can be specified multiple times. Attributes:
Attribute | Description | Required |
---|---|---|
file | Java properties file containing new release info properties that will entirely replace the current ones. | No |
delete | Comma-separated property keys to remove from application's release info | No |
<releaseInfo>
can also have any number of these nested elements:
Specifies additional release info properties. Attributes:
Attribute | Description | Required |
---|---|---|
key | Key of single property to add. | Yes, unless file is specified |
value | Value of single property to add. | |
file | Java property file containing any number of properties to add. | Yes, unless key and value are specified |
charset | Character set of property file. | No, default is ISO_8859_1 , in accordance with
java.util.Properties class. |
Property keys to remove from applicaiton's release info. Attributes:
Attribute | Description | Required |
---|---|---|
key | Key of property to remove. | Yes |
<jmod destfile="MyApp.jmod" classpath="build/myapp.jar"/> <link destDir="build/image" modulepath="MyApp.jmod" modules="com.example.myapp"/>
This will cause a bin/MyEditor script to appear in the image:
<jmod destfile="MyApp.jmod" classpath="build/myapp.jar"/> <link destDir="build/image" modulepath="MyApp.jmod" modules="com.example.myapp" launchers="MyEditor=com.example.myapp/com.example.myapp.editors.EditorMain"/>
Same thing, using a nested launcher element:
<jmod destfile="MyApp.jmod" classpath="build/myapp.jar"/> <link destDir="build/image" modulepath="MyApp.jmod" modules="com.example.myapp"> <launcher name="MyEditor" module="com.example.myapp" mainClass="com.example.myapp.editors.EditorMain"/> </link>
Include just the locales needed by the application from the jdk.localedata module:
<jmod destfile="MyApp.jmod" classpath="build/myapp.jar"/> <link destDir="build/image" modulepath="MyApp.jmod" modules="com.example.myapp,jdk.localedata" locales="zh,jp-*"/>
Compress entire image:
<jmod destfile="MyApp.jmod" classpath="build/myapp.jar"/> <link destDir="build/image" modulepath="MyApp.jmod" modules="com.example.myapp,jdk.localedata" compress="zip"/>
Compress only some files in the image:
<jmod destfile="MyApp.jmod" classpath="build/myapp.jar"/> <link destDir="build/image" modulepath="MyApp.jmod" modules="com.example.myapp,jdk.localedata"> <compress level="zip" files=".*\.xml"/> </link>
To create an image for a different platform:
jmod describe "$FOREIGN_JDK_HOME"/jmods/java.base.jmod | grep '^platform'
<jmod destfile="MyApp.jmod" classpath="build/myapp.jar" platform="windows-amd64"/>
<link destDir="build/image" modulepath="MyApp.jmod;${foreign-jdk-home}/jmods" modules="com.example.myapp"/>