diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index 4d4105d07..3568e1090 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -74,6 +74,7 @@ Harish Prabandham
Haroon Rafique
Hiroaki Nakamura
Holger Engels
+Ignacio Coloma
Ingenonsya France
Ingmar Stein
Irene Rusman
diff --git a/WHATSNEW b/WHATSNEW
index f43dede82..7a94eca26 100644
--- a/WHATSNEW
+++ b/WHATSNEW
@@ -92,6 +92,9 @@ Other changes:
* Added isSigned condition and task, and signedselector selector
Bugzilla report 32126.
+* Added preserveLastModified attribute to signjar task.
+ Bugzilla report 30987.
+
Changes from Ant 1.6.2 to current Ant 1.6 CVS version
=====================================================
diff --git a/docs/manual/CoreTasks/signjar.html b/docs/manual/CoreTasks/signjar.html
index ac40facb3..a77c1b51d 100644
--- a/docs/manual/CoreTasks/signjar.html
+++ b/docs/manual/CoreTasks/signjar.html
@@ -92,6 +92,12 @@ block
style of standard java memory specs (e.g. 128m = 128 MBytes)
No |
+
+ preservelastmodified |
+ Give the signed file the same last modified
+ time as the original jar file. |
+ No; default false. |
+
Parameters as nested elements
diff --git a/src/etc/testcases/taskdefs/signjar.xml b/src/etc/testcases/taskdefs/signjar.xml
index 14e870760..8ac1d080c 100644
--- a/src/etc/testcases/taskdefs/signjar.xml
+++ b/src/etc/testcases/taskdefs/signjar.xml
@@ -32,6 +32,32 @@
storepass="apacheant" maxmemory="128m"/>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/org/apache/tools/ant/taskdefs/SignJar.java b/src/main/org/apache/tools/ant/taskdefs/SignJar.java
index cd19b03f0..7e7662c17 100644
--- a/src/main/org/apache/tools/ant/taskdefs/SignJar.java
+++ b/src/main/org/apache/tools/ant/taskdefs/SignJar.java
@@ -66,6 +66,7 @@ public class SignJar extends Task {
protected boolean verbose;
protected boolean internalsf;
protected boolean sectionsonly;
+ protected boolean preserveLastModified;
/** The maximum amount of memory to use for Jar signer */
private String maxMemory;
@@ -237,6 +238,7 @@ public class SignJar extends Task {
return;
}
+ long lastModified = jarSource.lastModified();
final ExecTask cmd = (ExecTask) getProject().createTask("exec");
cmd.setExecutable(JavaEnvUtils.getJdkExecutable("jarsigner"));
@@ -302,6 +304,15 @@ public class SignJar extends Task {
cmd.setFailonerror(true);
cmd.setTaskName(getTaskName());
cmd.execute();
+
+ // restore the lastModified attribute
+ if (preserveLastModified) {
+ if (jarTarget != null) {
+ jarTarget.setLastModified(lastModified);
+ } else {
+ jarSource.setLastModified(lastModified);
+ }
+ }
}
protected boolean isUpToDate(File jarFile, File signedjarFile) {
@@ -345,5 +356,14 @@ public class SignJar extends Task {
return false;
}
}
+
+ /**
+ * true to indicate that the signed jar modification date remains the same as the original.
+ * Defaults to false
+ * @param preserveLastModified if true preserve the last modified time
+ */
+ public void setPreserveLastModified(boolean preserveLastModified) {
+ this.preserveLastModified = preserveLastModified;
+ }
}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/SignJarTest.java b/src/testcases/org/apache/tools/ant/taskdefs/SignJarTest.java
index 8f946edcb..7921b84bb 100644
--- a/src/testcases/org/apache/tools/ant/taskdefs/SignJarTest.java
+++ b/src/testcases/org/apache/tools/ant/taskdefs/SignJarTest.java
@@ -66,4 +66,8 @@ public class SignJarTest extends BuildFileTest {
public void testURLKeystoreHTTP() {
executeTarget("urlKeystoreHTTP");
}
+
+ public void testPreserveLastModified() {
+ executeTarget("preserveLastModified");
+ }
}