已弃用

此任务已弃用。请使用带有 zipfilesetzipgroupfilesetJar 任务Zip 任务。有关基于 JDK 的 jlink 工具的任务,请参见 Link

描述

有关基于 JDK 的 jlink 工具的任务,请参见 Link。此任务完全用于其他目的。

链接子构建和库中的条目。

jlink 任务可用于构建 jar 和 zip 文件,类似于 jar 任务。但是,jlink 提供了用于控制从输入文件添加条目到输出文件的方式的选项。具体而言,提供了用于合并来自多个 zip 或 jar 文件的条目的功能。

如果直接指定了合并文件(例如,在 mergefiles pathelement 的顶层)并且合并文件以 .zip.jar 结尾,则合并文件中的条目将合并到 outfile 中。即使在 mergefiles 元素中指定了其他扩展名的文件,也会将其添加到输出文件。在 mergefilesaddfiles 元素中指定的目录将按预期添加到输出文件:所有子目录中的文件都将递归添加到输出文件,并在输出文件中具有适当的前缀(不合并)。

在合并或添加的文件中找到重复条目和/或文件的情况下,jlink 会合并或添加第一个条目,并忽略所有后续条目。

jlink 会忽略 mergefiles 中的 META-INF 目录。用户应为输出文件提供自己的清单信息。

可以细化正在 jlink 的文件集。这可以通过 addfilesmergefiles 嵌套元素上的 includesincludesfileexcludesexcludesfiledefaultexcludes 属性来完成。使用 includesincludesfile 属性,您可以使用模式指定要包含的文件。使用 excludeexcludesfile 属性指定要排除的文件。这也是使用模式完成的。最后,使用 defaultexcludes 属性,您可以指定是否要使用默认排除。有关如何包含/排除文件以及如何编写模式,请参见有关 基于目录的任务 的部分。模式相对于目录。

参数

属性 描述 必需
outfile 输出文件的路径。
compress 输出是否应压缩。 trueyeson 将导致压缩输出。 否;默认为未压缩(膨胀)输出
mergefiles 要合并到输出中的文件(如果可能)。 两者之一
addfiles 要添加到输出中的文件。

示例

以下操作将合并 mergefoo.jarmergebar.jar 中的条目到 out.jar 中。 mac.jarpc.jar 将作为单个条目添加到 out.jar 中。

<jlink compress="false" outfile="out.jar">
   <mergefiles>
     <pathelement path="${build.dir}/mergefoo.jar"/>
     <pathelement path="${build.dir}/mergebar.jar"/>
   </mergefiles>
   <addfiles>
     <pathelement path="${build.dir}/mac.jar"/>
     <pathelement path="${build.dir}/pc.zip"/>
   </addfiles>
</jlink>

上述内容的非弃用替代方案

<jar compress="false" destfile="out.jar">
  <zipgroupfileset dir="${build.dir}">
    <include name="mergefoo.jar"/>
    <include name="mergebar.jar"/>
  </zipgroupfileset>
  <fileset dir="${build.dir}">
    <include name="mac.jar"/>
    <include name="pc.jar"/>
  </fileset>
</jar>

假设文件 foo.jar 包含两个条目:bar.classbarnone/myClass.zip。假设文件 foo.jar 的路径为 build/tempbuild/foo.jar。以下示例将在 out.jar 中提供条目 tempbuild/foo.jar

<jlink compress="false" outfile="out.jar">
   <mergefiles>
     <pathelement path="build/tempbuild"/>
   </mergefiles>
</jlink>

但是,下一个示例将在 out.jar 中产生两个顶层条目,即 bar.classbarnone/myClass.zip

<jlink compress="false" outfile="out.jar">
   <mergefiles>
     <pathelement path="build/tempbuild/foo.jar"/>
   </mergefiles>
</jlink>