Creates a manifest file.
This task can be used to write a Manifest file, optionally replacing or updating an existing file.
Manifests are processed according to the Jar file specification. Specifically, a manifest element consists of a set of attributes and sections. These sections in turn may contain attributes. Note in particular that this may result in manifest lines greater than 72 bytes being wrapped and continued on the next line.
The Apache Ant team regularly gets complaints that this task in generating invalid manifests. By and large, this is not the case: we believe that we are following the specification to the letter. The usual problem is that some third party manifest reader is not following the same specification as well as they think they should; we cannot generate invalid manifest files just because one single application is broken. Java ME runtimes appear to be particularly troublesome.
If you find that Ant generates manifests incompatible with your runtime, take a manifest it has built, fix it up however you need and switch to using the zip task to create the JAR, feeding in the hand-crafted manifest.
Attribute | Description | Required |
---|---|---|
file | the manifest-file to create/update. | Yes |
mode | One of updateor replace. |
No; default is replace |
encoding | The encoding used to read the existing manifest when updating. The task will always use UTF-8 when writing the manifest. | No; defaults to UTF-8 encoding |
mergeClassPathAttributes | Whether to merge the Class-Path attributes found in different manifests (if
updating). If false, only the attribute of the most recent manifest will be preserved. Since Ant 1.8.0. Unless you also set flattenAttributes to truethis may result in manifests containing multiple Class-Path
attributes which violates the manifest specification. |
No; default is false |
flattenAttributes | Whether to merge attributes occurring more than once in a section (this can only happen for
the Class-Path attribute) into a single attribute. Since Ant
1.8.0. |
No; default is false |
One attribute for the manifest file. Those attributes that are not nested into a section will be added to the main section.
Attribute | Description | Required |
---|---|---|
name | the name of the attribute, must match the regexp [A-Za-z0-9][A-Za-z0-9-_]*. |
Yes |
value | the value of the attribute. | Yes |
A manifest section—you can nest attribute elements into sections.
Attribute | Description | Required |
---|---|---|
name | the name of the section. | No, defaults to the main section |
Create or replace the file MANIFEST.MF. Note that the Built-By
attribute will take the value of the Ant property ${user.name}
. The same is true for
the ${version}
and ${TODAY}
properties. This example produces
a MANIFEST.MF that
contains package version identification for the package 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>
The manifest produced by the above would look like this:
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