org.apache.tools.ant.taskdefs
Class SignJar

java.lang.Object
  extended by org.apache.tools.ant.ProjectComponent
      extended by org.apache.tools.ant.Task
          extended by org.apache.tools.ant.taskdefs.AbstractJarSignerTask
              extended by org.apache.tools.ant.taskdefs.SignJar
All Implemented Interfaces:
java.lang.Cloneable

public class SignJar
extends AbstractJarSignerTask

Signs JAR or ZIP files with the javasign command line tool. The tool detailed dependency checking: files are only signed if they are not signed. The signjar attribute can point to the file to generate; if this file exists then its modification date is used as a cue as to whether to resign any JAR file. Timestamp driven signing is based on the unstable and inadequately documented information in the Java1.5 docs

Since:
Ant 1.1
See Also:
beta documentation

Field Summary
protected  java.io.File destDir
          the output directory when using paths.
static java.lang.String ERROR_BAD_MAP
          error string for unit test verification: "Cannot map source file to anything sensible: "
static java.lang.String ERROR_MAPPER_WITHOUT_DEST
          error string for unit test verification: "The destDir attribute is required if a mapper is set"
static java.lang.String ERROR_NO_ALIAS
          error string for unit test verification: "alias attribute must be set"
static java.lang.String ERROR_NO_STOREPASS
          error string for unit test verification: "storepass attribute must be set"
static java.lang.String ERROR_SIGNEDJAR_AND_PATHS
          error string for unit test verification "You cannot specify the signed JAR when using paths or filesets"
static java.lang.String ERROR_TODIR_AND_SIGNEDJAR
          error string for unit test verification: "\'destdir\' and \'signedjar\' cannot both be set"
static java.lang.String ERROR_TOO_MANY_MAPPERS
          error string for unit test verification: "Too many mappers"
protected  boolean internalsf
          flag for internal sf signing
protected  boolean lazy
          Whether to assume a jar which has an appropriate .SF file in is already signed.
protected  boolean sectionsonly
          sign sections only?
protected  java.lang.String sigfile
          name to a signature file
protected  java.io.File signedjar
          name of a single jar
protected  java.lang.String tsacert
          alias for the TSA in the keystore
protected  java.lang.String tsaurl
          URL for a tsa; null implies no tsa support
 
Fields inherited from class org.apache.tools.ant.taskdefs.AbstractJarSignerTask
alias, ERROR_NO_SOURCE, filesets, jar, JARSIGNER_COMMAND, keypass, keystore, maxMemory, storepass, storetype, verbose
 
Fields inherited from class org.apache.tools.ant.Task
target, taskName, taskType, wrapper
 
Fields inherited from class org.apache.tools.ant.ProjectComponent
description, location, project
 
Constructor Summary
SignJar()
           
 
Method Summary
 void add(FileNameMapper newMapper)
          add a mapper to determine file naming policy.
 void execute()
          sign the jar(s)
 FileNameMapper getMapper()
          get the active mapper; may be null
 java.lang.String getTsacert()
          get the -tsacert option
 java.lang.String getTsaurl()
          get the -tsaurl url
protected  boolean isSigned(java.io.File file)
          test for a file being signed, by looking for a signature in the META-INF directory with our alias.
protected  boolean isUpToDate(java.io.File jarFile, java.io.File signedjarFile)
          Compare a jar file with its corresponding signed jar.
 void setDestDir(java.io.File destDir)
          Optionally sets the output directory to be used.
 void setInternalsf(boolean internalsf)
          Flag to include the .SF file inside the signature; optional; default false
 void setLazy(boolean lazy)
          flag to control whether the presence of a signature file means a JAR is signed; optional, default false
 void setPreserveLastModified(boolean preserveLastModified)
          true to indicate that the signed jar modification date remains the same as the original.
 void setSectionsonly(boolean sectionsonly)
          flag to compute hash of entire manifest; optional, default false
 void setSigfile(java.lang.String sigfile)
          name of .SF/.DSA file; optional
 void setSignedjar(java.io.File signedjar)
          name of signed JAR file; optional
 void setTsacert(java.lang.String tsacert)
          set the alias in the keystore of the TSA to use;
 void setTsaurl(java.lang.String tsaurl)
           
 
Methods inherited from class org.apache.tools.ant.taskdefs.AbstractJarSignerTask
addFileset, addSysproperty, addValue, beginExecution, bindToKeystore, createJarSigner, createPath, createUnifiedSourcePath, createUnifiedSources, declareSysProperty, endExecution, getRedirector, hasResources, setAlias, setCommonOptions, setJar, setKeypass, setKeystore, setMaxmemory, setStorepass, setStoretype, setVerbose
 
Methods inherited from class org.apache.tools.ant.Task
bindToOwner, getOwningTarget, getRuntimeConfigurableWrapper, getTaskName, getTaskType, getWrapper, handleErrorFlush, handleErrorOutput, handleFlush, handleInput, handleOutput, init, isInvalid, log, log, log, log, maybeConfigure, perform, reconfigure, setOwningTarget, setRuntimeConfigurableWrapper, setTaskName, setTaskType
 
Methods inherited from class org.apache.tools.ant.ProjectComponent
clone, getDescription, getLocation, getProject, setDescription, setLocation, setProject
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

sigfile

protected java.lang.String sigfile
name to a signature file


signedjar

protected java.io.File signedjar
name of a single jar


internalsf

protected boolean internalsf
flag for internal sf signing


sectionsonly

protected boolean sectionsonly
sign sections only?


lazy

protected boolean lazy
Whether to assume a jar which has an appropriate .SF file in is already signed.


destDir

protected java.io.File destDir
the output directory when using paths.


tsaurl

protected java.lang.String tsaurl
URL for a tsa; null implies no tsa support


tsacert

protected java.lang.String tsacert
alias for the TSA in the keystore


ERROR_TODIR_AND_SIGNEDJAR

public static final java.lang.String ERROR_TODIR_AND_SIGNEDJAR
error string for unit test verification: "\'destdir\' and \'signedjar\' cannot both be set"

See Also:
Constant Field Values

ERROR_TOO_MANY_MAPPERS

public static final java.lang.String ERROR_TOO_MANY_MAPPERS
error string for unit test verification: "Too many mappers"

See Also:
Constant Field Values

ERROR_SIGNEDJAR_AND_PATHS

public static final java.lang.String ERROR_SIGNEDJAR_AND_PATHS
error string for unit test verification "You cannot specify the signed JAR when using paths or filesets"

See Also:
Constant Field Values

ERROR_BAD_MAP

public static final java.lang.String ERROR_BAD_MAP
error string for unit test verification: "Cannot map source file to anything sensible: "

See Also:
Constant Field Values

ERROR_MAPPER_WITHOUT_DEST

public static final java.lang.String ERROR_MAPPER_WITHOUT_DEST
error string for unit test verification: "The destDir attribute is required if a mapper is set"

See Also:
Constant Field Values

ERROR_NO_ALIAS

public static final java.lang.String ERROR_NO_ALIAS
error string for unit test verification: "alias attribute must be set"

See Also:
Constant Field Values

ERROR_NO_STOREPASS

public static final java.lang.String ERROR_NO_STOREPASS
error string for unit test verification: "storepass attribute must be set"

See Also:
Constant Field Values
Constructor Detail

SignJar

public SignJar()
Method Detail

setSigfile

public void setSigfile(java.lang.String sigfile)
name of .SF/.DSA file; optional

Parameters:
sigfile - the name of the .SF/.DSA file

setSignedjar

public void setSignedjar(java.io.File signedjar)
name of signed JAR file; optional

Parameters:
signedjar - the name of the signed jar file

setInternalsf

public void setInternalsf(boolean internalsf)
Flag to include the .SF file inside the signature; optional; default false

Parameters:
internalsf - if true include the .SF file inside the signature

setSectionsonly

public void setSectionsonly(boolean sectionsonly)
flag to compute hash of entire manifest; optional, default false

Parameters:
sectionsonly - flag to compute hash of entire manifest

setLazy

public void setLazy(boolean lazy)
flag to control whether the presence of a signature file means a JAR is signed; optional, default false

Parameters:
lazy - flag to control whether the presence of a signature

setDestDir

public void setDestDir(java.io.File destDir)
Optionally sets the output directory to be used.

Parameters:
destDir - the directory in which to place signed jars
Since:
Ant 1.7

add

public void add(FileNameMapper newMapper)
add a mapper to determine file naming policy. Only used with toDir processing.

Parameters:
newMapper - the mapper to add.
Since:
Ant 1.7

getMapper

public FileNameMapper getMapper()
get the active mapper; may be null

Returns:
mapper or null
Since:
Ant 1.7

getTsaurl

public java.lang.String getTsaurl()
get the -tsaurl url

Returns:
url or null
Since:
Ant 1.7

setTsaurl

public void setTsaurl(java.lang.String tsaurl)
Parameters:
tsaurl - the tsa url.
Since:
Ant 1.7

getTsacert

public java.lang.String getTsacert()
get the -tsacert option

Returns:
a certificate alias or null
Since:
Ant 1.7

setTsacert

public void setTsacert(java.lang.String tsacert)
set the alias in the keystore of the TSA to use;

Parameters:
tsacert - the cert alias.

execute

public void execute()
             throws BuildException
sign the jar(s)

Overrides:
execute in class Task
Throws:
BuildException - on errors

isUpToDate

protected boolean isUpToDate(java.io.File jarFile,
                             java.io.File signedjarFile)
Compare a jar file with its corresponding signed jar. The logic for this is complex, and best explained in the source itself. Essentially if either file doesnt exist, or the destfile has an out of date timestamp, then the return value is false.

If we are signing ourself, the check isSigned(File) is used to trigger the process.

Parameters:
jarFile - the unsigned jar file
signedjarFile - the result signed jar file
Returns:
true if the signedjarFile is considered up to date

isSigned

protected boolean isSigned(java.io.File file)
test for a file being signed, by looking for a signature in the META-INF directory with our alias.

Parameters:
file - the file to be checked
Returns:
true if the file is signed
See Also:
IsSigned.isSigned(File, String)

setPreserveLastModified

public void setPreserveLastModified(boolean preserveLastModified)
true to indicate that the signed jar modification date remains the same as the original. Defaults to false

Parameters:
preserveLastModified - if true preserve the last modified time