diff --git a/docs/manual/CoreTasks/java.html b/docs/manual/CoreTasks/java.html
index 2f68b6158..860a6e0f6 100644
--- a/docs/manual/CoreTasks/java.html
+++ b/docs/manual/CoreTasks/java.html
@@ -88,7 +88,7 @@ JVM.
failonerror |
Stop the buildprocess if the command exits with a
- returncode other than 0. Default is "false" |
+ returncode other than 0. Default is "false"(see note)
No |
@@ -220,6 +220,11 @@ see permissions
When the permission RuntimePermission exitVM has not been granted (or has
been revoked) the System.exit() call will be intercepted
and treated like indicated in failonerror.
+
+If you specify failonerror="true"
and you do not specify permissions,
+a set of default permissions will be added to your java invocation making sure that
+a non zero return code will lead to a BuildException
.
+
Settings will be ignored if fork is enabled.
diff --git a/src/etc/testcases/taskdefs/java.xml b/src/etc/testcases/taskdefs/java.xml
index 768974209..363dbeb81 100644
--- a/src/etc/testcases/taskdefs/java.xml
+++ b/src/etc/testcases/taskdefs/java.xml
@@ -139,7 +139,23 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/org/apache/tools/ant/taskdefs/Java.java b/src/main/org/apache/tools/ant/taskdefs/Java.java
index bc1e5786b..25e45c5ea 100644
--- a/src/main/org/apache/tools/ant/taskdefs/Java.java
+++ b/src/main/org/apache/tools/ant/taskdefs/Java.java
@@ -97,7 +97,7 @@ public class Java extends Task {
private Long timeout = null;
private Redirector redirector = new Redirector(this);
private String resultProperty;
- private Permissions perm;
+ private Permissions perm = null;
private boolean spawn = false;
private boolean incompatibleWithSpawn = false;
@@ -108,6 +108,7 @@ public class Java extends Task {
*/
public void execute() throws BuildException {
File savedDir = dir;
+ Permissions savedPermissions = perm;
int err = -1;
try {
@@ -122,6 +123,7 @@ public class Java extends Task {
maybeSetResultPropertyValue(err);
} finally {
dir = savedDir;
+ perm = savedPermissions;
}
}
@@ -179,6 +181,11 @@ public class Java extends Task {
Project.MSG_WARN);
}
+ if (perm == null && failOnError == true) {
+ perm = new Permissions();
+ log("running " + this.cmdl.getClassname()
+ + " with default permissions (exit forbidden)", Project.MSG_VERBOSE);
+ }
log("Running in same VM " + cmdl.describeJavaCommand(),
Project.MSG_VERBOSE);
}
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/JavaTest.java b/src/testcases/org/apache/tools/ant/taskdefs/JavaTest.java
index d7d75e36d..9bf28c5a5 100644
--- a/src/testcases/org/apache/tools/ant/taskdefs/JavaTest.java
+++ b/src/testcases/org/apache/tools/ant/taskdefs/JavaTest.java
@@ -196,6 +196,15 @@ public class JavaTest extends BuildFileTest {
assertEquals("-1",project.getProperty("exitcode"));
}
+ public void testRunFailWithFailOnError() {
+ expectBuildExceptionContaining("testRunFailWithFailOnError",
+ "non zero return code",
+ "Java returned:");
+ }
+
+ public void testRunSuccessWithFailOnError() {
+ executeTarget("testRunSuccessWithFailOnError");
+ }
public void testSpawn() {
FileUtils fileutils = FileUtils.newFileUtils();
File logFile = fileutils.createTempFile("spawn","log", project.getBaseDir());