自 Apache Ant 1.10.6 起

描述

将 jmod 文件组装成可执行映像。等效于 JDK 的 jlink 工具。

需要 Java 9 或更高版本。

参数

属性 描述 必需
destDir 创建的映像的根目录。
modulepath 要链接的 jmod 文件的路径状序列,用于创建映像。 除非存在嵌套的 <modulepath>,否则需要其中之一。
modulepathref 要链接的 jmod 文件的路径状序列,用于创建映像,以对在其他地方定义的路径的 引用 形式给出。
modules 要放入链接映像中的模块的逗号分隔列表。 是,除非存在一个或多个嵌套的 <module> 元素。
observableModules 构成链接工具在链接时可见的“宇宙”的显式模块的逗号分隔列表。
launchers 命令的逗号分隔列表,每个命令都采用 name=modulename=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 日志级别(DEBUGVERBOSEINFOWARNERR)记录。 否,默认值为不输出详细日志
compress 链接映像的压缩级别。其中之一
0none
不压缩(默认)
1strings
常量字符串共享
2zip
zip 压缩
否,默认值为不压缩
endianness 链接映像的字节顺序,必须为 littlebig否,默认值为本机字节顺序
checkDuplicateLegal 布尔值。当合并来自不同模块的法律声明时,因为它们具有相同的名称,请验证其内容是否相同。 否,默认值为 false,这意味着任何具有相同名称的许可证文件都被假定具有相同的内容,并且不会进行任何检查。
vmType 映像中的 Hotspot VM。其中之一
  • client
  • server
  • minimal
  • all
否,默认值为 all

作为嵌套元素指定的参数

<link> 可以具有以下嵌套元素

modulepath

路径状结构,指向要链接到映像中的 jmod 文件。

module

命名要放入链接映像中的单个模块。这可以多次指定。

属性

属性 描述 必需
name 要添加的模块的名称。

observableModule

命名对链接过程可见的模块,而不是将模块路径中的每个模块都视为可见。这可以多次指定。

属性

属性 描述 必需
name 要添加到可观察模块列表中的模块的名称。

launcher

指定将添加到链接映像中的可执行文件,该文件执行特定模块的主类。属性

属性 描述 必需
name 启动器的名称。这通常用于可执行文件的名称。
module 要执行的模块的名称。
mainClass 要执行的模块中的入口点类的名称。 必需,除非模块具有其自身定义的主类。

locale

指定要包含在链接映像中的语言环境。可以多次指定。需要 jdk.localedata 模块。属性

属性 描述 必需
name 语言环境的名称,或使用 * 的通配符模式,匹配多个语言环境名称。

resourceOrder

链接映像中的显式资源搜索顺序。可以多次指定。属性

属性 描述 必需
pattern 用于匹配资源的 标准 PathMatcher 模式 以下选项中必须选择一个
listFile 包含资源名称列表(不是模式)的文本文件,每行一个

如果任务上也存在 resourceOrder 属性,则其模式将被视为在嵌套的 <resourceOrder> 元素中的模式之前出现。

excludeResources

从链接映像树中排除文件。可以多次指定。属性

属性 描述 必需
pattern 用于匹配资源的 标准 PathMatcher 模式 以下选项中必须选择一个
listFile 包含资源名称列表(不是模式)的文本文件,每行一个

excludeFiles

从链接映像中排除文件。可以多次指定。属性

属性 描述 必需
pattern 用于匹配文件的 标准 PathMatcher 模式 以下选项中必须选择一个
listFile 包含文件名列表(不是模式)的文本文件,每行一个

compress

描述映像应如何压缩。属性

属性 描述 必需
level 链接映像的压缩级别。其中之一
0none
不压缩(默认)
1strings
常量字符串共享
2zip
zip 压缩
files 匹配要压缩的文件的模式的逗号分隔列表。每个模式都是 标准 PathMatcher 模式@filename,表示一个文本文件,每行一个文件名。

<compress> 还可以具有任意数量的嵌套 <files> 元素,具有以下属性

属性 描述 必需
pattern 用于匹配文件的 标准 PathMatcher 模式 以下选项中必须选择一个
listFile 包含文件名列表(不是模式)的文本文件,每行一个

releaseInfo

替换、增加或修剪映像的发布信息属性。可以多次指定。属性

属性 描述 必需
file 包含新发布信息属性的 Java 属性文件,这些属性将完全替换当前属性。
delete 要从应用程序的发布信息中删除的逗号分隔属性键

<releaseInfo> 还可以具有任意数量的以下嵌套元素

add

指定其他发布信息属性。属性

属性 描述 必需
key 要添加的单个属性的键。 是,除非指定了 file
value 要添加的单个属性的值。
file 包含任意数量要添加的属性的 Java 属性文件。 是,除非指定了 keyvalue
charset 属性文件的字符集。 否,默认值为 ISO_8859_1,符合 java.util.Properties 类。
delete

要从应用程序的发布信息中删除的属性键。属性

属性 描述 必需
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>

交叉编译

要为其他平台创建映像