diff --git a/src/main/org/apache/tools/ant/taskdefs/SignJar.java b/src/main/org/apache/tools/ant/taskdefs/SignJar.java
index a6fcf1f2f..37787059b 100644
--- a/src/main/org/apache/tools/ant/taskdefs/SignJar.java
+++ b/src/main/org/apache/tools/ant/taskdefs/SignJar.java
@@ -60,7 +60,7 @@ import org.apache.tools.ant.types.Commandline;
/**
* Sign a archive.
*
- * @author Peter Donald donaldp@mad.scientist.com
+ * @author Peter Donald donaldp@apache.org
*/
public class SignJar extends Task {
@@ -148,6 +148,8 @@ public class SignJar extends Task {
throw new BuildException("storepass attribute must be set");
}
+ if(isUpToDate()) return;
+
final StringBuffer sb = new StringBuffer();
final ExecTask cmd = (ExecTask) project.createTask("exec");
@@ -204,6 +206,23 @@ public class SignJar extends Task {
cmd.setFailonerror(true);
cmd.setTaskName( getTaskName() );
cmd.execute();
- }
+ }
+
+ protected boolean isUpToDate() {
+
+ if( null != jar && null != signedjar ) {
+
+ final File jarFile = new File(jar);
+ final File signedjarFile = new File(signedjar);
+
+ if(!jarFile.exists()) return false;
+ if(!signedjarFile.exists()) return false;
+ if(jarFile.equals(signedjarFile)) return false;
+ if(signedjarFile.lastModified() > jarFile.lastModified())
+ return true;
+ }
+
+ return false;
+ }
}