This tutorial look at how to use ant to create a Jar MANIFEST.MF file, as Prerequisites, please download Ant( and install it.

JAR file is a file format based on the popular ZIP file format and is used to aggregate many files into one, a JAR file is a essential zip file that contains an optional META-INF directory, the MANIFEST file is one single component of Jar file, under META-INF directory and used to describe all associated metadata of Jar file.

The MANIFEST file is represented as so-called “name: value” pairs inspired by the RFC822 standard, we also call these pairs headers or attributes, binary data of any form is represented as base64. Continuations are required for binary data which causes line length to exceed 72 bytes. Here is an example content of MANIFEST file:

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.6.5
Created-By: 1.5.0_07-b03 (Sun Microsystems Inc.)
Implementation-Title: ASM
Implementation-Version: 2.2.3
Implementation-Vendor: France Telecom R&D
Class-Path: com.asjava.Main
Main-Class: x-com.jar;common-io.jar

ANT supports Jar manifest task to create a manifest file, optionally replacing or updating an existing file. And you can write some attributes (e.g.Main-Class and Class-Path) to

Ant build.xml to create ant file

<property name="build.dir" value="build"/>
<property name="build.main.classes" value="${build.dir}/main_classes"/>
<property name="dist.dir" value="dist"/>
<property name="" value="iAntAndMainfestExample.jar"/>
<property name="3rdParty" value="3rdParty"/>

<target name="dist" depends="compile">
        <mkdir dir="${dist.dir}"/>
        <delete file="${dist.dir}/${}" failonerror="false"/>
        <jar destfile="${dist.dir}/${}" basedir="${build.main.classes}">
                <attribute name="Built-By" value="${}"/>
                <attribute name="Implementation-Vendor" value=", Inc"/>
                <attribute name="Implementation-Vendor-Id" value="com.Javarmi"/>
                <attribute name="Implementation-Title" value="Implementation"/>
                <attribute name="Class-Path"
${3rdParty}\xml-resolver-1.2.jar ${3rdParty}\XmlSchema-1.4.5.jar"/>
                <section name="com.asjava.plugin">
                    <attribute name="Module-Class" value="Plugin"/>

You use ant command line to excute build.xml and finally get the following JAR MANIFEST.MF File, the attribute ‘classpath’ is set in manifest file.

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.7.1
Created-By: 1.5.0_22-b03 (Sun Microsystems Inc.)
Built-By: Administrator
Implementation-Vendor:, Inc
Implementation-Vendor-Id: com.Javarmi
Implementation-Title: Implementation
Class-Path: 3rdParty\geronimo-annotation_1.0_spec-1.1.1.jar 3rdParty\x
 ml-resolver-1.2.jar 3rdParty\XmlSchema-1.4.5.jar

Name: com.asjava.plugin
Module-Class: Plugin

The ant task manifestis is a nested attribute in Task JAR, by the mean, manifest.MF is generated in Jar package, these content of manifest.MF describes the metadata of Jar.

The parameters of Ant Jar manifest task:

Attribute Description
file the manifest-file to create/update, it’s optional, by default it will be set named manifest.MF
mode One of “update” or “replace”, 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.
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.
flattenAttributes Whether to merge attributes occuring more than once in a section (this can only happen for the Class-Path attribute) into a single attribute. Since Ant 1.8.0.

I use ANT 1.7 to generate JAR Manifest.MF file, it works fine.