git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@557270 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -230,11 +230,14 @@ to a value other than its default, <code>"add"</code>.</b></p> | |||
| </tr> | |||
| <tr> | |||
| <td valign="top">strict</td> | |||
| <td valign="top">When this attribut is set to <tt>true</tt>, a BuildException | |||
| will be thrown if the packaging version specification was broken. If set to | |||
| <tt>false</tt> (default) only a message is logged (verbose). | |||
| <br>Defaults to false. <em>Since Ant 1.7.1</em></td> | |||
| <td valign="top" align="center">No</td> | |||
| <td valign="top">Configures how to handle breaks of the packaging version | |||
| specification: <ul> | |||
| <li><b>fail</b> = throws a BuildException</li> | |||
| <li><b>warn</b> = logs a message on warn level</li> | |||
| <li><b>ignore</b> = logs a message on verbose level (default)</li> | |||
| </ul> | |||
| <em>Since Ant 1.7.1</em></td> | |||
| <td valign="top" align="center">No, defaults to <tt>ignore</tt>. </td> | |||
| </tr> | |||
| </table> | |||
| @@ -237,20 +237,30 @@ | |||
| </jar> | |||
| </target> | |||
| <target name="testNoVersionInfo"> | |||
| <target name="testNoVersionInfoNoStrict"> | |||
| <mkdir dir="${tmp.dir}"/> | |||
| <jar destfile="${tmp.jar}" basedir="${tmp.dir}" strict="true"/> | |||
| <jar destfile="${tmp.jar}" basedir="${tmp.dir}"/> | |||
| </target> | |||
| <target name="testNoVersionInfoNoStrict"> | |||
| <target name="testNoVersionInfoFail"> | |||
| <mkdir dir="${tmp.dir}"/> | |||
| <jar destfile="${tmp.jar}" basedir="${tmp.dir}"/> | |||
| <jar destfile="${tmp.jar}" basedir="${tmp.dir}" strict="fail"/> | |||
| </target> | |||
| <target name="testNoVersionInfoIgnore"> | |||
| <mkdir dir="${tmp.dir}"/> | |||
| <jar destfile="${tmp.jar}" basedir="${tmp.dir}" strict="ignore"/> | |||
| </target> | |||
| <target name="testNoVersionInfoWarn"> | |||
| <mkdir dir="${tmp.dir}"/> | |||
| <jar destfile="${tmp.jar}" basedir="${tmp.dir}" strict="warn"/> | |||
| </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}" strict="true"> | |||
| <jar destfile="${tmp.jar}" basedir="${tmp.dir}" strict="fail"> | |||
| <manifest> | |||
| <attribute name="Implementation-Title" value="Packaging Version Test"/> | |||
| <attribute name="Implementation-Version" value="1.0"/> | |||
| @@ -143,11 +143,13 @@ public class Jar extends Zip { | |||
| */ | |||
| private Path indexJars; | |||
| // CheckStyle:LineLength OFF - Link is too long. | |||
| /** | |||
| * Strict mode for checking rules of the JAR-Specification. | |||
| * @see http://java.sun.com/j2se/1.3/docs/guide/versioning/spec/VersioningSpecification.html#PackageVersioning | |||
| */ | |||
| private boolean strict = false; | |||
| private StrictMode strict; | |||
| // CheckStyle:LineLength ON | |||
| /** | |||
| * Extra fields needed to make Solaris recognize the archive as a jar file. | |||
| @@ -165,6 +167,7 @@ public class Jar extends Zip { | |||
| emptyBehavior = "create"; | |||
| setEncoding("UTF8"); | |||
| rootEntries = new Vector(); | |||
| strict = new StrictMode("ignore"); | |||
| } | |||
| /** | |||
| @@ -196,8 +199,8 @@ public class Jar extends Zip { | |||
| * will be thrown if the Jar-Packaging specification was broken. | |||
| * @param strict New value of the strict mode. | |||
| */ | |||
| public void setStrict(boolean strict) { | |||
| this.strict = strict; | |||
| public void setStrict(String strict) { | |||
| this.strict = new StrictMode(strict); | |||
| } | |||
| /** | |||
| @@ -802,15 +805,17 @@ public class Jar extends Zip { | |||
| rootEntries.removeAllElements(); | |||
| } | |||
| // CheckStyle:LineLength OFF - Link is too long. | |||
| /** | |||
| * Check against packaging spec | |||
| * @see http://java.sun.com/j2se/1.3/docs/guide/versioning/spec/VersioningSpecification.html#PackageVersioning | |||
| */ | |||
| // CheckStyle:LineLength ON | |||
| private void checkJarSpec() { | |||
| String br = System.getProperty("line.separator"); | |||
| StringBuffer message = new StringBuffer(); | |||
| Section mainSection = (configuredManifest == null) | |||
| ? null | |||
| ? null | |||
| : configuredManifest.getMainSection(); | |||
| if (mainSection == null) { | |||
| @@ -833,10 +838,10 @@ public class Jar extends Zip { | |||
| message.append(br); | |||
| message.append("Location: ").append(getLocation()); | |||
| message.append(br); | |||
| if (strict) { | |||
| if (strict.getValue().equalsIgnoreCase("fail")) { | |||
| throw new BuildException(message.toString(), getLocation()); | |||
| } else { | |||
| log(message.toString(), Project.MSG_VERBOSE); | |||
| log(message.toString(), strict.getLogLevel()); | |||
| } | |||
| } | |||
| } | |||
| @@ -1025,4 +1030,25 @@ public class Jar extends Zip { | |||
| } | |||
| } | |||
| } | |||
| // CheckStyle:JavadocType OFF - simple enum | |||
| public class StrictMode extends EnumeratedAttribute { | |||
| // CheckStyle:JavadocMethod OFF - simple enum | |||
| public StrictMode() { | |||
| } | |||
| public StrictMode(String value) { | |||
| setValue(value); | |||
| } | |||
| public String[] getValues() { | |||
| return new String[]{"fail", "warn", "ignore"}; | |||
| } | |||
| /** | |||
| * @return The log level according to the strict mode. | |||
| */ | |||
| public int getLogLevel() { | |||
| return (getValue().equals("ignore")) ? Project.MSG_VERBOSE : Project.MSG_WARN; | |||
| } | |||
| // CheckStyle:JavadocMethod ON | |||
| } | |||
| // CheckStyle:JavadocType ON | |||
| } | |||
| @@ -268,8 +268,22 @@ public class JarTest extends BuildFileTest { | |||
| executeTarget("testIndexJarsPlusJarMarker"); | |||
| } | |||
| public void testNoVersionInfo() { | |||
| expectBuildExceptionContaining("testNoVersionInfo", "Manifest Implemention information missing.", "No Implementation-Title set."); | |||
| public void testNoVersionInfoFail() { | |||
| expectBuildExceptionContaining("testNoVersionInfoFail", "Manifest Implemention information missing.", "No Implementation-Title set."); | |||
| } | |||
| public void testNoVersionInfoIgnore() { | |||
| executeTarget("testNoVersionInfoIgnore"); | |||
| assertTrue( getFullLog().contains("No Implementation-Title set.") ); | |||
| assertTrue( getFullLog().contains("No Implementation-Version set.") ); | |||
| assertTrue( getFullLog().contains("No Implementation-Vendor set.") ); | |||
| } | |||
| public void testNoVersionInfoWarn() { | |||
| executeTarget("testNoVersionInfoWarn"); | |||
| assertTrue( getLog().contains("No Implementation-Title set.") ); | |||
| assertTrue( getLog().contains("No Implementation-Version set.") ); | |||
| assertTrue( getLog().contains("No Implementation-Vendor set.") ); | |||
| } | |||
| public void testNoVersionInfoNoStrict() { | |||