git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@792960 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -749,6 +749,10 @@ Other changes: | |||
| optional prefix and suffix attributes. | |||
| Bugzilla Report 45625 | |||
| * <jar> has a new attribute to enable indexing of META-INF | |||
| directories which is desabled for backwards compatibility reasons. | |||
| Bugzilla Report 47457 | |||
| Changes from Ant 1.7.0 TO Ant 1.7.1 | |||
| ============================================= | |||
| @@ -155,6 +155,20 @@ to a value other than its default, <code>"add"</code>.</b></p> | |||
| false.</td> | |||
| <td valign="top" align="center">No</td> | |||
| </tr> | |||
| <tr> | |||
| <td valign="top">indexMetaInf</td> | |||
| <td valign="top">whether to include META-INF and its children in | |||
| the index. Doesn't have any effect if <em>index</em> is | |||
| false.<br/> | |||
| Sun's jar implementation used to skip the META-INF directory and | |||
| Ant followed that example. The behavior has been changed with | |||
| <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4408526">Java | |||
| 5</a>. In order to avoid problems with Ant generated jars on | |||
| Java 1.4 or earlier Ant will not include META-INF unless | |||
| explicitly asked to.<br/> | |||
| <em>Ant 1.8.0</em> - Defaults to false.</td> | |||
| <td valign="top" align="center">No</td> | |||
| </tr> | |||
| <tr> | |||
| <td valign="top">update</td> | |||
| <td valign="top">indicates whether to update or overwrite | |||
| @@ -204,6 +204,20 @@ to a value other than its default, <code>"add"</code>.</b></p> | |||
| false.</td> | |||
| <td valign="top" align="center">No</td> | |||
| </tr> | |||
| <tr> | |||
| <td valign="top">indexMetaInf</td> | |||
| <td valign="top">whether to include META-INF and its children in | |||
| the index. Doesn't have any effect if <em>index</em> is | |||
| false.<br/> | |||
| Sun's jar implementation used to skip the META-INF directory and | |||
| Ant followed that example. The behavior has been changed with | |||
| <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4408526">Java | |||
| 5</a>. In order to avoid problems with Ant generated jars on | |||
| Java 1.4 or earlier Ant will not include META-INF unless | |||
| explicitly asked to.<br/> | |||
| <em>Ant 1.8.0</em> - Defaults to false.</td> | |||
| <td valign="top" align="center">No</td> | |||
| </tr> | |||
| <tr> | |||
| <td valign="top">manifestencoding</td> | |||
| <td valign="top">The encoding used to read the JAR manifest, when a manifest file is specified.</td> | |||
| @@ -119,6 +119,9 @@ public class Jar extends Zip { | |||
| /** jar index is JDK 1.3+ only */ | |||
| private boolean index = false; | |||
| /** Whether to index META-INF/ and its children */ | |||
| private boolean indexMetaInf = false; | |||
| /** | |||
| * whether to really create the archive in createEmptyZip, will | |||
| * get set in getResourcesToAdd. | |||
| @@ -223,6 +226,25 @@ public class Jar extends Zip { | |||
| index = flag; | |||
| } | |||
| /** | |||
| * Set whether or not to add META-INF and its children to the index. | |||
| * | |||
| * <p>Doesn't have any effect if index is false.</p> | |||
| * | |||
| * <p>Sun's jar implementation used to skip the META-INF directory | |||
| * and Ant followed that example. The behavior has been changed | |||
| * with Java 5. In order to avoid problems with Ant generated | |||
| * jars on Java 1.4 or earlier Ant will not include META-INF | |||
| * unless explicitly asked to.</p> | |||
| * | |||
| * @see http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4408526 | |||
| * @since Ant 1.8.0 | |||
| * @param flag a <code>boolean</code> value, defaults to false | |||
| */ | |||
| public void setIndexMetaInf(boolean flag) { | |||
| indexMetaInf = flag; | |||
| } | |||
| /** | |||
| * The character encoding to use in the manifest file. | |||
| * | |||
| @@ -972,7 +994,9 @@ public class Jar extends Zip { | |||
| // looks like nothing from META-INF should be added | |||
| // and the check is not case insensitive. | |||
| // see sun.misc.JarIndex | |||
| if (dir.startsWith("META-INF")) { | |||
| // see also | |||
| // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4408526 | |||
| if (!indexMetaInf && dir.startsWith("META-INF")) { | |||
| continue; | |||
| } | |||
| // name newline | |||
| @@ -1064,9 +1088,6 @@ public class Jar extends Zip { | |||
| org.apache.tools.zip.ZipEntry ze = | |||
| (org.apache.tools.zip.ZipEntry) entries.nextElement(); | |||
| String name = ze.getName(); | |||
| // META-INF would be skipped anyway, avoid index for | |||
| // manifest-only jars. | |||
| if (!name.startsWith("META-INF/")) { | |||
| if (ze.isDirectory()) { | |||
| dirSet.add(name); | |||
| } else if (name.indexOf("/") == -1) { | |||
| @@ -1079,7 +1100,6 @@ public class Jar extends Zip { | |||
| dirSet.add(name.substring(0, | |||
| name.lastIndexOf("/") + 1)); | |||
| } | |||
| } | |||
| } | |||
| dirs.addAll(dirSet); | |||
| } finally { | |||
| @@ -60,4 +60,30 @@ | |||
| </jar> | |||
| <au:assertLogDoesntContain text="skipping jar archive"/> | |||
| </target> | |||
| <target name="-metainf-setup"> | |||
| <mkdir dir="${input}/services"/> | |||
| <touch file="${input}/services/foo"/> | |||
| <mkdir dir="${output}"/> | |||
| </target> | |||
| <target name="testIndexNoMetaInf" depends="-metainf-setup"> | |||
| <jar index="true" destfile="${output}/test.jar"> | |||
| <metainf dir="${input}"/> | |||
| </jar> | |||
| <unjar src="${output}/test.jar" dest="${output}"/> | |||
| <au:assertFileExists file="${output}/META-INF/INDEX.LIST"/> | |||
| <au:assertResourceDoesntContain value="META-INF" | |||
| resource="${output}/META-INF/INDEX.LIST"/> | |||
| </target> | |||
| <target name="testIndexMetaInf" depends="-metainf-setup"> | |||
| <jar index="true" destfile="${output}/test.jar" indexMetaInf="true"> | |||
| <metainf dir="${input}"/> | |||
| </jar> | |||
| <unjar src="${output}/test.jar" dest="${output}"/> | |||
| <au:assertFileExists file="${output}/META-INF/INDEX.LIST"/> | |||
| <au:assertResourceContains value="META-INF" | |||
| resource="${output}/META-INF/INDEX.LIST"/> | |||
| </target> | |||
| </project> | |||