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> | ||||
<tr> | <tr> | ||||
<td valign="top">strict</td> | <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> | </tr> | ||||
</table> | </table> | ||||
@@ -237,20 +237,30 @@ | |||||
</jar> | </jar> | ||||
</target> | </target> | ||||
<target name="testNoVersionInfo"> | |||||
<target name="testNoVersionInfoNoStrict"> | |||||
<mkdir dir="${tmp.dir}"/> | <mkdir dir="${tmp.dir}"/> | ||||
<jar destfile="${tmp.jar}" basedir="${tmp.dir}" strict="true"/> | |||||
<jar destfile="${tmp.jar}" basedir="${tmp.dir}"/> | |||||
</target> | </target> | ||||
<target name="testNoVersionInfoNoStrict"> | |||||
<target name="testNoVersionInfoFail"> | |||||
<mkdir dir="${tmp.dir}"/> | <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> | ||||
<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 --> | <!-- see http://java.sun.com/j2se/1.3/docs/guide/versioning/spec/VersioningSpecification.html#PackageVersioning --> | ||||
<target name="testHasVersionInfo"> | <target name="testHasVersionInfo"> | ||||
<mkdir dir="${tmp.dir}"/> | <mkdir dir="${tmp.dir}"/> | ||||
<jar destfile="${tmp.jar}" basedir="${tmp.dir}" strict="true"> | |||||
<jar destfile="${tmp.jar}" basedir="${tmp.dir}" strict="fail"> | |||||
<manifest> | <manifest> | ||||
<attribute name="Implementation-Title" value="Packaging Version Test"/> | <attribute name="Implementation-Title" value="Packaging Version Test"/> | ||||
<attribute name="Implementation-Version" value="1.0"/> | <attribute name="Implementation-Version" value="1.0"/> | ||||
@@ -143,11 +143,13 @@ public class Jar extends Zip { | |||||
*/ | */ | ||||
private Path indexJars; | private Path indexJars; | ||||
// CheckStyle:LineLength OFF - Link is too long. | |||||
/** | /** | ||||
* Strict mode for checking rules of the JAR-Specification. | * Strict mode for checking rules of the JAR-Specification. | ||||
* @see http://java.sun.com/j2se/1.3/docs/guide/versioning/spec/VersioningSpecification.html#PackageVersioning | * @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. | * Extra fields needed to make Solaris recognize the archive as a jar file. | ||||
@@ -165,6 +167,7 @@ public class Jar extends Zip { | |||||
emptyBehavior = "create"; | emptyBehavior = "create"; | ||||
setEncoding("UTF8"); | setEncoding("UTF8"); | ||||
rootEntries = new Vector(); | 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. | * will be thrown if the Jar-Packaging specification was broken. | ||||
* @param strict New value of the strict mode. | * @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(); | rootEntries.removeAllElements(); | ||||
} | } | ||||
// CheckStyle:LineLength OFF - Link is too long. | |||||
/** | /** | ||||
* Check against packaging spec | * Check against packaging spec | ||||
* @see http://java.sun.com/j2se/1.3/docs/guide/versioning/spec/VersioningSpecification.html#PackageVersioning | * @see http://java.sun.com/j2se/1.3/docs/guide/versioning/spec/VersioningSpecification.html#PackageVersioning | ||||
*/ | */ | ||||
// CheckStyle:LineLength ON | |||||
private void checkJarSpec() { | private void checkJarSpec() { | ||||
String br = System.getProperty("line.separator"); | String br = System.getProperty("line.separator"); | ||||
StringBuffer message = new StringBuffer(); | StringBuffer message = new StringBuffer(); | ||||
Section mainSection = (configuredManifest == null) | Section mainSection = (configuredManifest == null) | ||||
? null | |||||
? null | |||||
: configuredManifest.getMainSection(); | : configuredManifest.getMainSection(); | ||||
if (mainSection == null) { | if (mainSection == null) { | ||||
@@ -833,10 +838,10 @@ public class Jar extends Zip { | |||||
message.append(br); | message.append(br); | ||||
message.append("Location: ").append(getLocation()); | message.append("Location: ").append(getLocation()); | ||||
message.append(br); | message.append(br); | ||||
if (strict) { | |||||
if (strict.getValue().equalsIgnoreCase("fail")) { | |||||
throw new BuildException(message.toString(), getLocation()); | throw new BuildException(message.toString(), getLocation()); | ||||
} else { | } 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"); | 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() { | public void testNoVersionInfoNoStrict() { | ||||