revert sigfile to a String - does not make sense to be a File Added a testcase with keystore for signjar PR: 1284, 10754 Submitted by: Jonathan Keller git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@273684 13f79535-47bb-0310-9956-ffa450edef68master
@@ -14,7 +14,7 @@ tool detailed dependency checking: files are only signed if they | |||||
are not signed. The <tt>signjar</tt> attribute can point to the file to | are not signed. The <tt>signjar</tt> attribute can point to the file to | ||||
generate; if this file exists then | generate; if this file exists then | ||||
its modification date is used as a cue as to whether to resign any JAR file. | its modification date is used as a cue as to whether to resign any JAR file. | ||||
<br> | |||||
<br> | |||||
<strong>Note:</strong> Requires Java 1.2 or later. </p> | <strong>Note:</strong> Requires Java 1.2 or later. </p> | ||||
<h3>Parameters</h3> | <h3>Parameters</h3> | ||||
@@ -83,9 +83,15 @@ block</td> | |||||
<tr> | <tr> | ||||
<td valign="top">lazy</td> | <td valign="top">lazy</td> | ||||
<td valign="top">flag to control whether the presence of a signature | <td valign="top">flag to control whether the presence of a signature | ||||
file means a JAR is signed</td> | |||||
file means a JAR is signed</td> | |||||
<td valign="top" align="center">No; default false</td> | <td valign="top" align="center">No; default false</td> | ||||
</tr> | |||||
</tr> | |||||
<tr> | |||||
<td valign="top">maxmemory</td> | |||||
<td valign="top">Specifies the maximum memory the jarsigner VM will use. Specified in the | |||||
style of standard java memory specs (e.g. 128m = 128 MBytes)</td> | |||||
<td valign="top" align="center">No</td> | |||||
</tr> | |||||
</table> | </table> | ||||
<h3>Parameters as nested elements</h3> | <h3>Parameters as nested elements</h3> | ||||
<table border="1" cellpadding="2" cellspacing="0"> | <table border="1" cellpadding="2" cellspacing="0"> | ||||
@@ -99,7 +105,7 @@ block</td> | |||||
<td valign="top">fileset of JAR files to sign</td> | <td valign="top">fileset of JAR files to sign</td> | ||||
<td valign="top" align="center">No</td> | <td valign="top" align="center">No</td> | ||||
</tr> | </tr> | ||||
</table> | |||||
</table> | |||||
<h3>Examples</h3> | <h3>Examples</h3> | ||||
<blockquote> | <blockquote> | ||||
<p><code><signjar jar="${dist}/lib/ant.jar" | <p><code><signjar jar="${dist}/lib/ant.jar" | ||||
@@ -0,0 +1,32 @@ | |||||
<project name="signjartest" default="help"> | |||||
<property name="classes.dir" value="../../../../build/classes"/> | |||||
<target name="basic"> | |||||
<jar jarfile="signtest.jar" basedir="${classes.dir}" includes="**/Task.class"/> | |||||
<signjar jar="signtest.jar" alias="testonly" keystore="../testkeystore" | |||||
storepass="apacheant"/> | |||||
</target> | |||||
<target name="sigfile"> | |||||
<jar jarfile="signtest.jar" basedir="${classes.dir}" includes="**/Task.class"/> | |||||
<signjar jar="signtest.jar" alias="testonly" keystore="../testkeystore" | |||||
storepass="apacheant" sigfile="TEST"/> | |||||
</target> | |||||
<target name="maxmemory"> | |||||
<jar jarfile="signtest.jar" basedir="${classes.dir}" includes="**/Task.class"/> | |||||
<signjar jar="signtest.jar" alias="testonly" keystore="../testkeystore" | |||||
storepass="apacheant" maxmemory="128m"/> | |||||
</target> | |||||
<target name="clean"> | |||||
<delete file="signtest.jar"/> | |||||
</target> | |||||
<target name="help"> | |||||
<echo>This build is for use with Ant's test cases</echo> | |||||
</target> | |||||
</project> | |||||
@@ -71,13 +71,13 @@ import org.apache.tools.ant.util.JavaEnvUtils; | |||||
* are not signed. The <tt>signjar</tt> attribute can point to the file to | * are not signed. The <tt>signjar</tt> attribute can point to the file to | ||||
* generate; if this file exists then | * generate; if this file exists then | ||||
* its modification date is used as a cue as to whether to resign any JAR file. | * its modification date is used as a cue as to whether to resign any JAR file. | ||||
* <br> | |||||
* <br> | |||||
* <strong>Note:</strong> Requires Java 1.2 or later. </p> | * <strong>Note:</strong> Requires Java 1.2 or later. </p> | ||||
* | |||||
* @author Peter Donald | |||||
* | |||||
* @author Peter Donald | |||||
* <a href="mailto:donaldp@apache.org">donaldp@apache.org</a> | * <a href="mailto:donaldp@apache.org">donaldp@apache.org</a> | ||||
* @author Nick Fortescue | |||||
* @author Nick Fortescue | |||||
* <a href="mailto:nick@ox.compsoc.net">nick@ox.compsoc.net</a> | * <a href="mailto:nick@ox.compsoc.net">nick@ox.compsoc.net</a> | ||||
* @since Ant 1.1 | * @since Ant 1.1 | ||||
* @ant.task category="java" | * @ant.task category="java" | ||||
@@ -102,12 +102,15 @@ public class SignJar extends Task { | |||||
protected String storepass; | protected String storepass; | ||||
protected String storetype; | protected String storetype; | ||||
protected String keypass; | protected String keypass; | ||||
protected File sigfile; | |||||
protected String sigfile; | |||||
protected File signedjar; | protected File signedjar; | ||||
protected boolean verbose; | protected boolean verbose; | ||||
protected boolean internalsf; | protected boolean internalsf; | ||||
protected boolean sectionsonly; | protected boolean sectionsonly; | ||||
/** The maximum amount of memory to use for Jar signer */ | |||||
private String maxMemory; | |||||
/** | /** | ||||
* the filesets of the jars to sign | * the filesets of the jars to sign | ||||
*/ | */ | ||||
@@ -118,6 +121,17 @@ public class SignJar extends Task { | |||||
*/ | */ | ||||
protected boolean lazy; | protected boolean lazy; | ||||
/** | |||||
* Set the maximum memory to be used by the jarsigner process | |||||
* | |||||
* @param max a string indicating the maximum memory according to the | |||||
* JVM conventions (e.g. 128m is 128 Megabytes) | |||||
*/ | |||||
public void setMaxmemory(String max) { | |||||
maxMemory = max; | |||||
} | |||||
/** | /** | ||||
* the jar file to sign; required | * the jar file to sign; required | ||||
*/ | */ | ||||
@@ -163,7 +177,7 @@ public class SignJar extends Task { | |||||
/** | /** | ||||
* name of .SF/.DSA file; optional | * name of .SF/.DSA file; optional | ||||
*/ | */ | ||||
public void setSigfile(final File sigfile) { | |||||
public void setSigfile(final String sigfile) { | |||||
this.sigfile = sigfile; | this.sigfile = sigfile; | ||||
} | } | ||||
@@ -216,7 +230,7 @@ public class SignJar extends Task { | |||||
} | } | ||||
/** | |||||
/** | |||||
* sign the jar(s) | * sign the jar(s) | ||||
*/ | */ | ||||
public void execute() throws BuildException { | public void execute() throws BuildException { | ||||
@@ -245,7 +259,7 @@ public class SignJar extends Task { | |||||
/** | /** | ||||
* sign one jar | * sign one jar | ||||
*/ | */ | ||||
private void doOneJar(File jarSource, File jarTarget) | |||||
private void doOneJar(File jarSource, File jarTarget) | |||||
throws BuildException { | throws BuildException { | ||||
if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1)) { | if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1)) { | ||||
throw new BuildException("The signjar task is only available on " | throw new BuildException("The signjar task is only available on " | ||||
@@ -267,6 +281,10 @@ public class SignJar extends Task { | |||||
final ExecTask cmd = (ExecTask) getProject().createTask("exec"); | final ExecTask cmd = (ExecTask) getProject().createTask("exec"); | ||||
cmd.setExecutable("jarsigner"); | cmd.setExecutable("jarsigner"); | ||||
if (maxMemory != null) { | |||||
cmd.createArg().setValue("-J-Xmx" + maxMemory); | |||||
} | |||||
if (null != keystore) { | if (null != keystore) { | ||||
cmd.createArg().setValue("-keystore"); | cmd.createArg().setValue("-keystore"); | ||||
cmd.createArg().setValue(keystore.toString()); | cmd.createArg().setValue(keystore.toString()); | ||||
@@ -289,7 +307,7 @@ public class SignJar extends Task { | |||||
if (null != sigfile) { | if (null != sigfile) { | ||||
cmd.createArg().setValue("-sigfile"); | cmd.createArg().setValue("-sigfile"); | ||||
cmd.createArg().setValue(sigfile.toString()); | |||||
cmd.createArg().setValue(sigfile); | |||||
} | } | ||||
if (null != jarTarget) { | if (null != jarTarget) { | ||||
@@ -0,0 +1,100 @@ | |||||
/* | |||||
* The Apache Software License, Version 1.1 | |||||
* | |||||
* Copyright (c) 2002 The Apache Software Foundation. All rights | |||||
* reserved. | |||||
* | |||||
* Redistribution and use in source and binary forms, with or without | |||||
* modification, are permitted provided that the following conditions | |||||
* are met: | |||||
* | |||||
* 1. Redistributions of source code must retain the above copyright | |||||
* notice, this list of conditions and the following disclaimer. | |||||
* | |||||
* 2. Redistributions in binary form must reproduce the above copyright | |||||
* notice, this list of conditions and the following disclaimer in | |||||
* the documentation and/or other materials provided with the | |||||
* distribution. | |||||
* | |||||
* 3. The end-user documentation included with the redistribution, if | |||||
* any, must include the following acknowlegement: | |||||
* "This product includes software developed by the | |||||
* Apache Software Foundation (http://www.apache.org/)." | |||||
* Alternately, this acknowlegement may appear in the software itself, | |||||
* if and wherever such third-party acknowlegements normally appear. | |||||
* | |||||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||||
* Foundation" must not be used to endorse or promote products derived | |||||
* from this software without prior written permission. For written | |||||
* permission, please contact apache@apache.org. | |||||
* | |||||
* 5. Products derived from this software may not be called "Apache" | |||||
* nor may "Apache" appear in their names without prior written | |||||
* permission of the Apache Group. | |||||
* | |||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||||
* SUCH DAMAGE. | |||||
* ==================================================================== | |||||
* | |||||
* This software consists of voluntary contributions made by many | |||||
* individuals on behalf of the Apache Software Foundation. For more | |||||
* information on the Apache Software Foundation, please see | |||||
* <http://www.apache.org/>. | |||||
*/ | |||||
package org.apache.tools.ant.taskdefs; | |||||
import java.io.File; | |||||
import java.io.FileReader; | |||||
import java.io.IOException; | |||||
import java.util.Date; | |||||
import java.util.Vector; | |||||
import java.util.Enumeration; | |||||
import org.apache.tools.ant.BuildFileTest; | |||||
import org.apache.tools.ant.Project; | |||||
/** | |||||
* Testcase for the Signjar task | |||||
* | |||||
* @author Conor MacNeill | |||||
*/ | |||||
public class SignJarTest extends BuildFileTest { | |||||
public static final String EXPANDED_MANIFEST | |||||
= "src/etc/testcases/taskdefs/manifests/META-INF/MANIFEST.MF"; | |||||
public SignJarTest(String name) { | |||||
super(name); | |||||
} | |||||
public void setUp() { | |||||
configureProject("src/etc/testcases/taskdefs/signjar.xml"); | |||||
} | |||||
public void tearDown() { | |||||
executeTarget("clean"); | |||||
} | |||||
public void testBasicSigning() { | |||||
executeTarget("basic"); | |||||
} | |||||
public void testSigFile() { | |||||
executeTarget("sigfile"); | |||||
} | |||||
public void testMaxMemory() { | |||||
executeTarget("maxmemory"); | |||||
} | |||||
} |