git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@553857 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -1547,6 +1547,22 @@ | |||
| <!-- Used by AntlibTest.testAntlibResource: --> | |||
| <jar jarfile="${build.tests}/org/apache/tools/ant/taskdefs/test2-antlib.jar"> | |||
| <manifest> | |||
| <attribute name="Extension-name" | |||
| value="org.apache.tools.ant"/> | |||
| <attribute name="Specification-Title" | |||
| value="Apache Ant"/> | |||
| <attribute name="Specification-Version" | |||
| value="${manifest-version}"/> | |||
| <attribute name="Specification-Vendor" | |||
| value="Apache Software Foundation"/> | |||
| <attribute name="Implementation-Title" | |||
| value="org.apache.tools.ant"/> | |||
| <attribute name="Implementation-Version" | |||
| value="${manifest-version}"/> | |||
| <attribute name="Implementation-Vendor" | |||
| value="Apache Software Foundation"/> | |||
| </manifest> | |||
| <zipfileset dir="${tests.etc.dir}" fullpath="taskdefs/test.antlib.xml"> | |||
| <include name="taskdefs/test2.antlib.xml"/> | |||
| </zipfileset> | |||
| @@ -73,14 +73,17 @@ attribute of a zipfileset in a Zip task. The one difference is that if the | |||
| 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> | |||
| <a target="_blank" 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> | |||
| being wrapped and continued on the next line.</p> | |||
| <p>The Jar task checks whether you specified package information according to the | |||
| <a target="_blank" href="http://java.sun.com/j2se/1.3/docs/guide/versioning/spec/VersioningSpecification.html#PackageVersioning"> | |||
| versioning specification</a>.</p> | |||
| <p><b>Please note that the zip format allows multiple files of the same | |||
| fully-qualified name to exist within a single archive. This has been | |||
| documented as causing various problems for unsuspecting users. If you wish | |||
| fully-qualified name to exist within a single archive. This has been | |||
| documented as causing various problems for unsuspecting users. If you wish | |||
| to avoid this behavior you must set the <code>duplicate</code> attribute | |||
| to a value other than its default, <code>"add"</code>.</b></p> | |||
| @@ -236,5 +236,23 @@ | |||
| </indexjars> | |||
| </jar> | |||
| </target> | |||
| <target name="testNoVersionInfo"> | |||
| <mkdir dir="${tmp.dir}"/> | |||
| <jar destfile="${tmp.jar}" basedir="${tmp.dir}"/> | |||
| </target> | |||
| <!-- see http://java.sun.com/j2se/1.3/docs/guide/versioning/spec/VersioningSpecification.html#PackageVersioning --> | |||
| <target name="testHasVersionInfo"> | |||
| <mkdir dir="${tmp.dir}"/> | |||
| <jar destfile="${tmp.jar}" basedir="${tmp.dir}"> | |||
| <manifest> | |||
| <attribute name="Implementation-Title" value="Packaging Version Test"/> | |||
| <attribute name="Implementation-Version" value="1.0"/> | |||
| <attribute name="Implementation-Vendor" value="Apache Software Foundation"/> | |||
| </manifest> | |||
| </jar> | |||
| </target> | |||
| </project> | |||
| @@ -45,6 +45,7 @@ import java.util.zip.ZipFile; | |||
| import org.apache.tools.ant.BuildException; | |||
| import org.apache.tools.ant.Project; | |||
| import org.apache.tools.ant.taskdefs.Manifest.Section; | |||
| import org.apache.tools.ant.types.EnumeratedAttribute; | |||
| import org.apache.tools.ant.types.Path; | |||
| import org.apache.tools.ant.types.ResourceCollection; | |||
| @@ -76,6 +77,7 @@ public class Jar extends Zip { | |||
| /** merged manifests added through addConfiguredManifest */ | |||
| private Manifest configuredManifest; | |||
| /** shadow of the above if upToDate check alters the value */ | |||
| private Manifest savedConfiguredManifest; | |||
| @@ -158,7 +160,7 @@ public class Jar extends Zip { | |||
| setEncoding("UTF8"); | |||
| rootEntries = new Vector(); | |||
| } | |||
| /** | |||
| * Not used for jar files. | |||
| * @param we not used | |||
| @@ -773,6 +775,25 @@ public class Jar extends Zip { | |||
| */ | |||
| protected void cleanUp() { | |||
| super.cleanUp(); | |||
| // check against packaging spec | |||
| // http://java.sun.com/j2se/1.3/docs/guide/versioning/spec/VersioningSpecification.html#PackageVersioning | |||
| Section mainSection = (configuredManifest==null) ? null : configuredManifest.getMainSection(); | |||
| if (mainSection==null) { | |||
| log("No Implementation-Title set. (" + getLocation() + ")"); | |||
| log("No Implementation-Version set. (" + getLocation() + ")"); | |||
| log("No Implementation-Vendor set. (" + getLocation() + ")"); | |||
| } else { | |||
| if (mainSection.getAttribute("Implementation-Title") == null) { | |||
| log("No Implementation-Title set. (" + getLocation() + ")"); | |||
| } | |||
| if (mainSection.getAttribute("Implementation-Version") == null) { | |||
| log("No Implementation-Version set. (" + getLocation() + ")"); | |||
| } | |||
| if (mainSection.getAttribute("Implementation-Vendor") == null) { | |||
| log("No Implementation-Vendor set. (" + getLocation() + ")"); | |||
| } | |||
| } | |||
| // we want to save this info if we are going to make another pass | |||
| if (!doubleFilePass || !skipWriting) { | |||
| @@ -267,4 +267,19 @@ public class JarTest extends BuildFileTest { | |||
| public void testIndexJarsPlusJarMarker() { | |||
| executeTarget("testIndexJarsPlusJarMarker"); | |||
| } | |||
| public void testNoVersionInfo() { | |||
| executeTarget("testNoVersionInfo"); | |||
| assertLogContaining("No Implementation-Title set."); | |||
| assertLogContaining("No Implementation-Version set."); | |||
| assertLogContaining("No Implementation-Vendor set."); | |||
| } | |||
| public void testHasVersionInfo() { | |||
| executeTarget("testHasVersionInfo"); | |||
| assertFalse( getLog().contains("No Implementation-Title set.") ); | |||
| assertFalse( getLog().contains("No Implementation-Version set.") ); | |||
| assertFalse( getLog().contains("No Implementation-Vendor set.") ); | |||
| } | |||
| } | |||