|
- <html>
-
- <head>
- <meta http-equiv="Content-Language" content="en-us">
- <title>Jar Task</title>
- </head>
-
- <body>
-
- <h2><a name="jar">Jar</a></h2>
- <h3>Description</h3>
- <p>Jars a set of files.</p>
- <p>The <i>basedir</i> attribute is the reference directory from where to jar.</p>
- <p>Note that file permissions will not be stored in the resulting jarfile.</p>
- <p>It is possible to refine the set of files that are being jarred. This can be
- done with the <i>includes</i>, <i>includesfile</i>, <i>excludes</i>, <i>excludesfile</i> and <i>defaultexcludes</i>
- attributes. With the <i>includes</i> or <i>includesfile</i> attribute you specify the files you want to
- have included by using patterns. The <i>exclude</i> or <i>excludesfile</i> attribute is used to specify
- the files you want to have excluded. This is also done with patterns. And
- finally with the <i>defaultexcludes</i> attribute, you can specify whether you
- want to use default exclusions or not. See the section on <a
- href="../dirtasks.html#directorybasedtasks">directory based tasks</a>, on how the
- inclusion/exclusion of files works, and how to write patterns.</p>
- <p>This task forms an implicit <a href="../CoreTypes/fileset.html">FileSet</a> and
- supports all attributes of <code><fileset></code>
- (<code>dir</code> becomes <code>basedir</code>) as well as the nested
- <code><include></code>, <code><exclude></code> and
- <code><patternset></code> elements.</p>
- <p>You can also use nested file sets for more flexibility, and specify
- multiple ones to merge together different trees of files into one JAR.
- The extended fileset and groupfileset attributes from the zip task are
- also available in the jar task.
- See the <a href="zip.html">Zip</a> task for more details and examples.</p>
- <p>If the manifest is omitted, a simple one will be supplied by Ant.
- If there is a manifest or manifests in your set of files, these manifests can
- be used if <i>filesetmanifests</i> is set to <i>merge</i> or <i>mergewithoutmain</i>.</p>
- <p>The <code>update</code> parameter controls what happens if the
- JAR file already exists. When set to <code>yes</code>, the JAR file is
- updated with the files specified. When set to <code>no</code> (the
- default) the JAR file is overwritten. An example use of this is
- provided in the <a href="zip.html">Zip task documentation</a>.</p>
- <p>(The Jar task is a shortcut for specifying the manifest file of a JAR file.
- The same thing can be accomplished by using the <i>fullpath</i>
- attribute of a zipfileset in a Zip task. The one difference is that if the
- <i>manifest</i> attribute is not specified, the Jar task will
- include an empty one for you.)</p>
-
- <p>Manifests are processed by the Jar task according to the
- <a href="http://java.sun.com/j2se/1.3/docs/guide/jar/jar.html">Jar file specification.</a>
- Note in particular that this may result in manifest lines greater than 72 bytes
- being wrapped and continued on the next line.
- </p>
-
- <h3>Parameters</h3>
- <table border="1" cellpadding="2" cellspacing="0">
- <tr>
- <td valign="top"><b>Attribute</b></td>
- <td valign="top"><b>Description</b></td>
- <td align="center" valign="top"><b>Required</b></td>
- </tr>
- <tr>
- <td valign="top">destfile</td>
- <td valign="top">the JAR file to create.</td>
- <td valign="top" align="center">Yes</td>
- </tr>
- <tr>
- <td valign="top">basedir</td>
- <td valign="top">the directory from which to jar the files.</td>
- <td valign="top" align="center">No</td>
- </tr>
- <tr>
- <td valign="top">compress</td>
- <td valign="top">Not only store data but also compress them, defaults to true</td>
- <td align="center" valign="top">No</td>
- </tr>
- <tr>
- <td valign="top">encoding</td>
- <td valign="top">The character encoding to use for filenames
- inside the archive. Defaults to UTF8. <strong>It is not
- recommended to change this value as the created archive will most
- likely be unreadable for Java otherwise.</strong></td>
- <td align="center" valign="top">No</td>
- </tr>
- <tr>
- <td valign="top">filesonly</td>
- <td valign="top">Store only file entries, defaults to false</td>
- <td align="center" valign="top">No</td>
- </tr>
- <tr>
- <td valign="top">includes</td>
- <td valign="top">comma separated list of patterns of files that must be
- included. All files are included when omitted.</td>
- <td valign="top" align="center">No</td>
- </tr>
- <tr>
- <td valign="top">includesfile</td>
- <td valign="top">the name of a file. Each line of this file is
- taken to be an include pattern</td>
- <td valign="top" align="center">No</td>
- </tr>
- <tr>
- <td valign="top">excludes</td>
- <td valign="top">comma separated list of patterns of files that must be
- excluded. No files (except default excludes) are excluded when omitted.</td>
- <td valign="top" align="center">No</td>
- </tr>
- <tr>
- <td valign="top">excludesfile</td>
- <td valign="top">the name of a file. Each line of this file is
- taken to be an exclude pattern</td>
- <td valign="top" align="center">No</td>
- </tr>
- <tr>
- <td valign="top">defaultexcludes</td>
- <td valign="top">indicates whether default excludes should be used or not
- ("yes"/"no"). Default excludes are used when omitted.</td>
- <td valign="top" align="center">No</td>
- </tr>
- <tr>
- <td valign="top">manifest</td>
- <td valign="top">the manifest file to use. This can be either the location of a manifest, or the name of a jar added through a fileset. If its the name of an added jar, the task expects the manifest to be in the jar at META-INF/MANIFEST.MF</td>
- <td valign="top" align="center">No</td>
- </tr>
- <tr>
- <td valign="top">filesetmanifest</td>
- <td valign="top">behavior when a Manifest is found in a zipfileset or
- zipgroupfileset file is found. Valid values are "skip",
- "merge", and "mergewithoutmain". "merge"
- will merge all of manifests together, and merge this into any other
- specified manifests. "mergewithoutmain" merges everything
- but the Main section of the manifests. Default value is "skip".
- <b>Note:</b> if this attribute's value is not "skip", the
- created jar will not be readable by using java.util.jar.JarInputStream
- </td>
- <td valign="top" align="center">No</td>
- </tr>
- <tr>
- <td valign="top">update</td>
- <td valign="top">indicates whether to update or overwrite
- the destination file if it already exists.</td>
- <td valign="top" align="center">No</td>
- </tr>
- <tr>
- <td valign="top">whenempty</td>
- <td valign="top">behavior when no files match. Valid values are "fail", "skip", and "create". Default is "skip".</td>
- <td valign="top" align="center">No</td>
- </tr>
- <tr>
- <td valign="top">duplicate</td>
- <td valign="top">behavior when a duplicate file is found. Valid values are "add", "preserve", and "fail". The default value is "add". </td>
- <td valign="top" align="center">No</td>
- </tr>
- <tr>
- <td valign="top">index</td>
- <td valign="top">whether to create an <A HREF="http://java.sun.com/j2se/1.3/docs/guide/jar/jar.html#JAR%20Index">index list</A> to speed up classloading. This is a JDK 1.3+ specific feature. Defaults to false. </td>
- <td valign="top" align="center">No</td>
- </tr>
- </table>
-
- <h3>Nested elements</h3>
- <h4>metainf</h4>
- <p>The nested <code>metainf</code> element specifies a <a
- href="../CoreTypes/fileset.html">FileSet</a>. All files included in this fileset will
- end up in the <code>META-INF</code> directory of the jar file. If this
- fileset includes a file named <code>MANIFEST.MF</code>, the file is
- ignored and you will get a warning.</p>
-
- <h4>manifest</h4>
- <p>The manifest nested element allows the manifest for the Jar file to
- be provided inline in the build file rather than in an external
- file. This element is identical to the
- <a href="manifest.html">manifest</a> task, but its file and mode
- attributes will be ignored.</p>
- <p>
- If both an inline manifest and an external file are both specified, the
- manifests are merged.
- </p>
-
- <p>When using inline manifests, the Jar task will check whether the build
- file is more recent that the Jar file when deciding whether to rebuild the
- Jar. This will not take into account property file changes which may affect
- the resulting Jar.
- </p>
-
- <h3>Examples</h3>
- <pre> <jar destfile="${dist}/lib/app.jar" basedir="${build}/classes"/></pre>
- <p>jars all files in the <code>${build}/classes</code> directory into a file
- called <code>app.jar</code> in the <code>${dist}/lib</code> directory.</p>
- <pre> <jar destfile="${dist}/lib/app.jar"
- basedir="${build}/classes"
- excludes="**/Test.class"
- /></pre>
- <p>jars all files in the <code>${build}/classes</code> directory into a file
- called <code>app.jar</code> in the <code>${dist}/lib</code> directory. Files
- with the name <code>Test.class</code> are excluded.</p>
- <pre> <jar destfile="${dist}/lib/app.jar"
- basedir="${build}/classes"
- includes="mypackage/test/**"
- excludes="**/Test.class"
- /></pre>
- <p>jars all files in the <code>${build}/classes</code> directory into a file
- called <code>app.jar</code> in the <code>${dist}/lib</code> directory. Only
- files under the directory <code>mypackage/test</code> are used, and files with
- the name <code>Test.class</code> are excluded.</p>
- <pre> <jar destfile="${dist}/lib/app.jar">
- <fileset dir="${build}/classes"
- excludes="**/Test.class"
- />
- <fileset dir="${src}/resources"/>
- </jar></pre>
- <p>jars all files in the <code>${build}/classes</code> directory and also
- in the <code>${src}/resources</code> directory together into a file
- called <code>app.jar</code> in the <code>${dist}/lib</code> directory.
- Files with the name <code>Test.class</code> are excluded.
- If there are files such as <code>${build}/classes/mypackage/MyClass.class</code>
- and <code>${src}/resources/mypackage/image.gif</code>, they will appear
- in the same directory in the JAR (and thus be considered in the same package
- by Java).</p>
-
- <pre> <jar destfile="test.jar" basedir=".">
- <include name="build"/>
- <manifest>
- <attribute name="Built-By" value="${user.name}"/>
- <section name="common/class1.class">
- <attribute name="Sealed" value="false"/>
- </section>
- </manifest>
- </jar></pre>
- <p>
- This is an example of an inline manifest specification. Note that the Built-By
- attribute will take the value of the Ant property ${user.name}. The manifest
- produced by the above would look like this:
- </p>
- <pre><code>Manifest-Version: 1.0
- Built-By: conor
- Created-By: Apache Ant 1.5alpha
-
- Name: common/class1.class
- Sealed: false</code></pre>
-
- <hr>
- <p align="center">Copyright © 2000-2002 Apache Software Foundation. All rights
- Reserved.</p>
-
- </body>
- </html>
|