自 Apache Ant 1.10.6 起
将 jmod 文件组装成可执行映像。等效于 JDK 的 jlink 工具。
需要 Java 9 或更高版本。
| 属性 | 描述 | 必需 |
|---|---|---|
| destDir | 创建的映像的根目录。 | 是 |
| modulepath | 要链接的 jmod 文件的路径状序列,用于创建映像。 | 除非存在嵌套的 <modulepath>,否则需要其中之一。 |
| modulepathref | 要链接的 jmod 文件的路径状序列,用于创建映像,以对在其他地方定义的路径的 引用 形式给出。 | |
| modules | 要放入链接映像中的模块的逗号分隔列表。 | 是,除非存在一个或多个嵌套的 <module> 元素。 |
| observableModules | 构成链接工具在链接时可见的“宇宙”的显式模块的逗号分隔列表。 | 否 |
| launchers | 命令的逗号分隔列表,每个命令都采用 name=module 或 name=module/mainclass 的形式 |
否 |
| locales | 要包含的额外语言环境的逗号分隔列表,或与多个语言环境名称匹配的通配符模式。需要 jdk.localedata 模块。 |
否 |
| excludeResources | 指定要从源 jmod 中排除的资源的模式的逗号分隔列表。每个模式都是 标准 PathMatcher 模式 或 @filename,表示一个文本文件,每行一个资源名称。 |
否 |
| excludeFiles | 指定要从链接映像中排除的文件的模式的逗号分隔列表。每个模式都是 标准 PathMatcher 模式 或 @filename,表示一个文本文件,每行一个文件名。 |
否 |
| resourceOrder | 指定资源搜索顺序的模式的逗号分隔列表。每个模式都是 标准 PathMatcher 模式 或 @filename,表示一个文本文件,每行一个资源名称。 |
否 |
| bindServices | 布尔值,是否在链接映像中包含与显式链接的模块使用的服务提供者接口相对应的模块路径中找到的任何服务提供者。 | 否,默认值为 false |
| ignoreSigning | 布尔值,是否允许签名的 jar 文件。(注意:从 Java 11 开始,此选项被忽略,始终被视为 true。) | 否,默认值为 false |
| includeHeaders | 布尔值,是否在链接映像中包含头文件。 | 否,默认值为 true |
| includeManPages | 布尔值,是否在链接映像中包含手册页。 | 否,默认值为 true |
| includeNativeCommands | 布尔值,是否在链接映像中包含本机可执行文件。 | 否,默认值为 true |
| debug | 布尔值,是否包含调试信息。 | 否,默认值为 true |
| verboseLevel | 如果设置,链接器将生成详细输出,该输出将在指定的 Ant 日志级别(DEBUG、VERBOSE、INFO、WARN 或 ERR)记录。 |
否,默认值为不输出详细日志 |
| compress | 链接映像的压缩级别。其中之一
|
否,默认值为不压缩 |
| endianness | 链接映像的字节顺序,必须为 little 或 big | 否,默认值为本机字节顺序 |
| checkDuplicateLegal | 布尔值。当合并来自不同模块的法律声明时,因为它们具有相同的名称,请验证其内容是否相同。 | 否,默认值为 false,这意味着任何具有相同名称的许可证文件都被假定具有相同的内容,并且不会进行任何检查。 |
| vmType | 映像中的 Hotspot VM。其中之一
|
否,默认值为 all |
<link> 可以具有以下嵌套元素
路径状结构,指向要链接到映像中的 jmod 文件。
命名要放入链接映像中的单个模块。这可以多次指定。
属性
| 属性 | 描述 | 必需 |
|---|---|---|
| name | 要添加的模块的名称。 | 是 |
命名对链接过程可见的模块,而不是将模块路径中的每个模块都视为可见。这可以多次指定。
属性
| 属性 | 描述 | 必需 |
|---|---|---|
| name | 要添加到可观察模块列表中的模块的名称。 | 是 |
指定将添加到链接映像中的可执行文件,该文件执行特定模块的主类。属性
| 属性 | 描述 | 必需 |
|---|---|---|
| name | 启动器的名称。这通常用于可执行文件的名称。 | 是 |
| module | 要执行的模块的名称。 | 是 |
| mainClass | 要执行的模块中的入口点类的名称。 | 必需,除非模块具有其自身定义的主类。 |
指定要包含在链接映像中的语言环境。可以多次指定。需要 jdk.localedata 模块。属性
| 属性 | 描述 | 必需 |
|---|---|---|
| name | 语言环境的名称,或使用 的通配符模式,匹配多个语言环境名称。 |
是 |
链接映像中的显式资源搜索顺序。可以多次指定。属性
| 属性 | 描述 | 必需 |
|---|---|---|
| pattern | 用于匹配资源的 标准 PathMatcher 模式 | 以下选项中必须选择一个 |
| listFile | 包含资源名称列表(不是模式)的文本文件,每行一个 |
如果任务上也存在 resourceOrder 属性,则其模式将被视为在嵌套的 <resourceOrder> 元素中的模式之前出现。
从链接映像树中排除文件。可以多次指定。属性
| 属性 | 描述 | 必需 |
|---|---|---|
| pattern | 用于匹配资源的 标准 PathMatcher 模式 | 以下选项中必须选择一个 |
| listFile | 包含资源名称列表(不是模式)的文本文件,每行一个 |
从链接映像中排除文件。可以多次指定。属性
| 属性 | 描述 | 必需 |
|---|---|---|
| pattern | 用于匹配文件的 标准 PathMatcher 模式 | 以下选项中必须选择一个 |
| listFile | 包含文件名列表(不是模式)的文本文件,每行一个 |
描述映像应如何压缩。属性
| 属性 | 描述 | 必需 |
|---|---|---|
| level | 链接映像的压缩级别。其中之一
|
是 |
| files | 匹配要压缩的文件的模式的逗号分隔列表。每个模式都是 标准 PathMatcher 模式 或 @filename,表示一个文本文件,每行一个文件名。 |
否 |
<compress> 还可以具有任意数量的嵌套 <files> 元素,具有以下属性
| 属性 | 描述 | 必需 |
|---|---|---|
| pattern | 用于匹配文件的 标准 PathMatcher 模式 | 以下选项中必须选择一个 |
| listFile | 包含文件名列表(不是模式)的文本文件,每行一个 |
替换、增加或修剪映像的发布信息属性。可以多次指定。属性
| 属性 | 描述 | 必需 |
|---|---|---|
| file | 包含新发布信息属性的 Java 属性文件,这些属性将完全替换当前属性。 | 否 |
| delete | 要从应用程序的发布信息中删除的逗号分隔属性键 | 否 |
<releaseInfo> 还可以具有任意数量的以下嵌套元素
指定其他发布信息属性。属性
| 属性 | 描述 | 必需 |
|---|---|---|
| key | 要添加的单个属性的键。 | 是,除非指定了 file |
| value | 要添加的单个属性的值。 | |
| file | 包含任意数量要添加的属性的 Java 属性文件。 | 是,除非指定了 key 和 value |
| charset | 属性文件的字符集。 | 否,默认值为 ISO_8859_1,符合 java.util.Properties 类。 |
要从应用程序的发布信息中删除的属性键。属性
| 属性 | 描述 | 必需 |
|---|---|---|
| key | 要删除的属性的键。 | 是 |
<jmod destfile="MyApp.jmod" classpath="build/myapp.jar"/>
<link destDir="build/image" modulepath="MyApp.jmod"
modules="com.example.myapp"/>
这将导致在映像中出现 bin/MyEditor 脚本
<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"/>
相同的事情,使用嵌套的 launcher 元素
<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>
仅包含应用程序从 jdk.localedata 模块中需要的语言环境
<jmod destfile="MyApp.jmod" classpath="build/myapp.jar"/>
<link destDir="build/image" modulepath="MyApp.jmod"
modules="com.example.myapp,jdk.localedata"
locales="zh,jp-*"/>
压缩整个映像
<jmod destfile="MyApp.jmod" classpath="build/myapp.jar"/>
<link destDir="build/image" modulepath="MyApp.jmod"
modules="com.example.myapp,jdk.localedata"
compress="zip"/>
仅压缩映像中的某些文件
<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>
要为其他平台创建映像
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"/>