清单

描述

创建清单文件。

此任务可用于写入清单文件,可以选择替换或更新现有文件。

清单根据 Jar 文件规范 进行处理。具体来说,清单元素由一组属性和节组成。这些节反过来可能包含属性。特别要注意,这可能会导致超过 72 字节的清单行被换行并在下一行继续。

Apache Ant 团队经常收到关于此任务生成无效清单的投诉。总的来说,情况并非如此:我们相信我们正在严格按照规范进行操作。通常的问题是,一些第三方清单阅读器没有像他们认为的那样遵循相同的规范;我们不能仅仅因为一个应用程序出现故障就生成无效的清单文件。Java ME 运行时似乎特别麻烦。

如果您发现 Ant 生成的清单与您的运行时不兼容,请获取它构建的清单,根据需要对其进行修复,然后切换到使用 zip 任务创建 JAR,并输入手工制作的清单。

参数

属性 描述 必需
文件 要创建/更新的清单文件。
模式 “更新”或“替换”之一。 否;默认值为“替换”
编码 用于在更新时读取现有清单的编码。任务在写入清单时始终使用 UTF-8。 否;默认为 UTF-8 编码
mergeClassPathAttributes 是否合并不同清单中找到的 Class-Path 属性(如果更新)。如果为“false”,则只保留最新清单的属性。自 Ant 1.8.0 起
除非您还将 flattenAttributes 设置为“true”,否则这可能会导致清单包含多个 Class-Path 属性,这违反了清单规范。
否;默认值为“false”
flattenAttributes 是否将一个节中多次出现的属性(这只能发生在 Class-Path 属性中)合并到单个属性中。自 Ant 1.8.0 起 否;默认值为“false”

作为嵌套元素指定的参数

属性

清单文件的一个属性。那些没有嵌套到节中的属性将被添加到主节中。

属性 描述 必需
名称 属性的名称,必须匹配正则表达式 [A-Za-z0-9][A-Za-z0-9-_]*
价值 属性的值。

清单节 - 您可以在节中嵌套 属性 元素。

属性 描述 必需
名称 节的名称。 否,默认为主节

例子

创建或替换文件 MANIFEST.MF。请注意,Built-By 属性将采用 Ant 属性 ${user.name} 的值。${version}${TODAY} 属性也是如此。此示例生成一个 MANIFEST.MF,其中包含 包版本标识,用于包 common

<manifest file="MANIFEST.MF">
  <attribute name="Built-By" value="${user.name}"/>
  <section name="common">
    <attribute name="Specification-Title" value="Example"/>
    <attribute name="Specification-Version" value="${version}"/>
    <attribute name="Specification-Vendor" value="Example Organization"/>
    <attribute name="Implementation-Title" value="common"/>
    <attribute name="Implementation-Version" value="${version} ${TODAY}"/>
    <attribute name="Implementation-Vendor" value="Example Corp."/>
  </section>
  <section name="common/class1.class">
    <attribute name="Sealed" value="false"/>
  </section>
</manifest>

上面生成的清单将如下所示

Manifest-Version: 1.0
Built-By: bodewig
Created-By: Apache Ant 1.9

Name: common
Specification-Title: Example
Specification-Vendor: Example Organization
Implementation-Vendor: Example Corp.
Specification-Version: 1.2
Implementation-Version: 1.2 September 10, 2013
Implementation-Title: common

Name: common/class1.class
Sealed: false