From 2907030ab0cfd24783426d24bf06f7bbee19995f Mon Sep 17 00:00:00 2001
From: Conor MacNeill
Date: Sat, 8 Jul 2000 12:33:26 +0000
Subject: [PATCH] New signjar task.
For consistency across ant tasks, I changed the method by which the boolean
attributes are set to use the Project.toBoolean method.
Submitted by: Peter Donald
git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@267746 13f79535-47bb-0310-9956-ffa450edef68
---
docs/index.html | 78 +++++++
.../apache/tools/ant/taskdefs/SignJar.java | 216 ++++++++++++++++++
.../tools/ant/taskdefs/defaults.properties | 1 +
3 files changed, 295 insertions(+)
create mode 100644 src/main/org/apache/tools/ant/taskdefs/SignJar.java
diff --git a/docs/index.html b/docs/index.html
index bb66caa97..a2381c9de 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -524,6 +524,7 @@ If you do not want these default excludes applied, you may disable them with the
Rename
Replace
Rmic
+ SignJar
Tar
Taskdef
Touch
@@ -2597,6 +2598,83 @@ compiled files will be stored in the directory ${build}/classes
.
${build}/classes whose classname starts with
Remote. The compiled files will be stored in the directory
${build}/classes
.
+
+
+
+Description
+Signs a jar or zip file with the javasign command line tool.
+
+Parameters
+
+
+ Attribute |
+ Description |
+ Required |
+
+
+ jar |
+ the jar file to sign |
+ Yes. |
+
+
+ alias |
+ the alias to sign under |
+ Yes. |
+
+
+ storepass |
+ password for keystore integrity. |
+ Yes. |
+
+
+ keystore |
+ keystore location |
+ No |
+
+
+ storetype |
+ keystore type |
+ No |
+
+
+ keypass |
+ password for private key (if different) |
+ No |
+
+
+ sigfile |
+ name of .SF/.DSA file |
+ No |
+
+
+ signedjar |
+ name of signed JAR file |
+ No |
+
+
+ verbose |
+ (true | false) verbose output when signing |
+ No |
+
+
+ internalsf |
+ (true | false) include the .SF file inside the signature
+block |
+ No |
+
+
+ sectionsonly |
+ (true | false) don't compute hash of entire manifest |
+ No |
+
+
+Examples
+
+ <signjar jar="${dist}/lib/ant.jar"
+alias="apache-group" storepass="secret" />
+
+signs the ant.jar with alias "apache-group" accessing the
+keystore and private key via "secret" password.
Description
diff --git a/src/main/org/apache/tools/ant/taskdefs/SignJar.java b/src/main/org/apache/tools/ant/taskdefs/SignJar.java
new file mode 100644
index 000000000..7b71d4df2
--- /dev/null
+++ b/src/main/org/apache/tools/ant/taskdefs/SignJar.java
@@ -0,0 +1,216 @@
+/*
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 1999 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", "Tomcat", 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
+ * .
+ */
+package org.apache.tools.ant.taskdefs;
+
+import org.apache.tools.ant.*;
+import java.io.File;
+
+/**
+ * Sign a archive.
+ *
+ * @author Peter Donald donaldp@mad.scientist.com
+ */
+public class SignJar extends Task {
+
+ /**
+ * The name of the jar file.
+ */
+ protected String jar;
+
+ /**
+ * The alias of signer.
+ */
+ protected String alias;
+
+ /**
+ * The name of keystore file.
+ */
+ protected String keystore;
+ protected String storepass;
+ protected String storetype;
+ protected String keypass;
+ protected String sigfile;
+ protected String signedjar;
+ protected boolean verbose;
+ protected boolean internalsf;
+ protected boolean sectionsonly;
+
+ public void setJar(final String jar) {
+ this.jar = jar;
+ }
+
+ public void setAlias(final String alias) {
+ this.alias = alias;
+ }
+
+ public void setKeystore(final String keystore) {
+ this.keystore = keystore;
+ }
+
+ public void setStorepass(final String storepass) {
+ this.storepass = storepass;
+ }
+
+ public void setStoretype(final String storetype) {
+ this.storetype = storetype;
+ }
+
+ public void setKeypass(final String keypass) {
+ this.keypass = keypass;
+ }
+
+ public void setSigfile(final String sigfile) {
+ this.sigfile = sigfile;
+ }
+
+ public void setSignedjar(final String signedjar) {
+ this.signedjar = signedjar;
+ }
+
+ public void setVerbose(final String verbose) {
+ this.verbose = project.toBoolean(verbose);
+ }
+
+ public void setInternalsf(final String internalsf) {
+ this.internalsf = project.toBoolean(internalsf);
+ }
+
+ public void setSectionsonly(final String sectionsonly) {
+ this.sectionsonly = project.toBoolean(sectionsonly);
+ }
+
+ public void execute() throws BuildException {
+ if (project.getJavaVersion().equals(Project.JAVA_1_1)) {
+ throw new BuildException("The signjar task is only available on JDK versions 1.2 or greater");
+ }
+
+ if (null == jar) {
+ throw new BuildException("jar attribute must be set");
+ }
+
+ if (null == alias) {
+ throw new BuildException("alias attribute must be set");
+ }
+
+ if (null == storepass) {
+ throw new BuildException("storepass attribute must be set");
+ }
+
+ final StringBuffer sb = new StringBuffer();
+
+ sb.append("jarsigner ");
+
+ if (null != keystore) {
+ sb.append("-keystore \"");
+ sb.append(keystore);
+ sb.append("\" ");
+ }
+
+ if (null != storepass) {
+ sb.append("-storepass \"");
+ sb.append(storepass);
+ sb.append("\" ");
+ }
+
+ if (null != storetype) {
+ sb.append("-storetype \"");
+ sb.append(storetype);
+ sb.append("\" ");
+ }
+
+ if (null != keypass) {
+ sb.append("-keypass \"");
+ sb.append(keypass);
+ sb.append("\" ");
+ }
+
+ if (null != sigfile) {
+ sb.append("-sigfile \"");
+ sb.append(sigfile);
+ sb.append("\" ");
+ }
+
+ if (null != signedjar) {
+ sb.append("-signedjar \"");
+ sb.append(signedjar);
+ sb.append("\" ");
+ }
+
+ if (verbose) {
+ sb.append("-verbose ");
+ }
+
+ if (internalsf) {
+ sb.append("-internalsf ");
+ }
+
+ if (sectionsonly) {
+ sb.append("-sectionsonly ");
+ }
+
+ sb.append('\"');
+ sb.append(jar);
+ sb.append("\" ");
+
+ sb.append('\"');
+ sb.append(alias);
+ sb.append("\" ");
+
+ log("Signing Jar : " + (new File(jar)).getAbsolutePath());
+ final Exec cmd = (Exec) project.createTask("exec");
+ cmd.setCommand(sb.toString());
+ cmd.execute();
+ }
+}
+
diff --git a/src/main/org/apache/tools/ant/taskdefs/defaults.properties b/src/main/org/apache/tools/ant/taskdefs/defaults.properties
index 28e33270b..2bfce266a 100644
--- a/src/main/org/apache/tools/ant/taskdefs/defaults.properties
+++ b/src/main/org/apache/tools/ant/taskdefs/defaults.properties
@@ -33,6 +33,7 @@ patch=org.apache.tools.ant.taskdefs.Patch
compileTask=org.apache.tools.ant.taskdefs.CompileTask
style=org.apache.tools.ant.taskdefs.XSLTProcess
touch=org.apache.tools.ant.taskdefs.Touch
+signjar=org.apache.tools.ant.taskdefs.SignJar
# optional tasks
script=org.apache.tools.ant.taskdefs.optional.Script