git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@274500 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -83,6 +83,13 @@ JVM. | |||
| returncode other than 0. Default is "false"</td> | |||
| <td align="center" valign="top">No</td> | |||
| </tr> | |||
| <tr> | |||
| <td valign="top">resultproperty</td> | |||
| <td valign="top">The name of a property in which the return code of the | |||
| command should be stored. Only of interest if failonerror=false | |||
| and if fork=true.</td> | |||
| <td align="center" valign="top">No</td> | |||
| </tr> | |||
| <tr> | |||
| <td valign="top">dir</td> | |||
| <td valign="top">The directory to invoke the VM in. (ignored if | |||
| @@ -179,6 +186,16 @@ href="../using.html#path">PATH like structure</a> and can also be set via a nest | |||
| forked VM via nested <i>env</i> elements. See the description in the | |||
| section about <a href="exec.html#env">exec</a></p> | |||
| <p>Settings will be ignored if fork is disabled.</p> | |||
| <h3>Errors and return codes</h3> | |||
| By default the return code of a <java> is ignored. Alternatively, you can set <code>resultproperty</code> to the name | |||
| of a property and have it assigned to the result code (barring immutability, | |||
| of course). | |||
| When you set <code>failonerror="true"</code>, the only possible value for <code>resultproperty</code> is 0. Any non zero response is treated as an | |||
| error and would mean the build exits. | |||
| <p> Similarly, if <code>failonerror="false"</code> and <code>fork="false"</code> | |||
| , then <code><java></code> <b>must</b> return 0 otherwise the build will exit, as the class was run by the build jvm.</p> | |||
| <h3>Examples</h3> | |||
| <pre> | |||
| <java classname="test.Main"> | |||
| @@ -218,7 +235,7 @@ and with a maximum memory of 128MB. Any non zero return code breaks the build. | |||
| JVM, as it takes different parameters for other JVMs, | |||
| That JVM can be started from <exec> if required. | |||
| <hr> | |||
| <p align="center">Copyright © 2000-2002 Apache Software Foundation. All rights | |||
| <p align="center">Copyright © 2000-2003 Apache Software Foundation. All rights | |||
| Reserved.</p> | |||
| </body> | |||
| @@ -89,5 +89,26 @@ | |||
| </java> | |||
| </target> | |||
| <target name="testResultPropertyZero"> | |||
| <java classname="${app}" | |||
| classpath="${tests-classpath.value}" | |||
| resultproperty="exitcode" | |||
| > | |||
| </java> | |||
| <echo message="exitcode = ${exitcode}"/> | |||
| </target> | |||
| <target name="testResultPropertyNonZero"> | |||
| <java classname="${app}" | |||
| classpath="${tests-classpath.value}" | |||
| resultproperty="exitcode" | |||
| failonerror="false" | |||
| fork="true" | |||
| > | |||
| <arg value="-1"/> | |||
| </java> | |||
| <echo message="exitcode = ${exitcode}"/> | |||
| </target> | |||
| <target name="foo" /> | |||
| </project> | |||
| @@ -75,6 +75,7 @@ import org.apache.tools.ant.types.Reference; | |||
| * @author Stefano Mazzocchi | |||
| * <a href="mailto:stefano@apache.org">stefano@apache.org</a> | |||
| * @author Stefan Bodewig | |||
| * @author <a href="mailto:donal@savvion.com">Donal Quinlan</a> | |||
| * | |||
| * @since Ant 1.1 | |||
| * | |||
| @@ -91,6 +92,7 @@ public class Java extends Task { | |||
| private boolean append = false; | |||
| private Long timeout = null; | |||
| private Redirector redirector = new Redirector(this); | |||
| private String resultProperty; | |||
| /** | |||
| * Do the execution. | |||
| */ | |||
| @@ -106,6 +108,7 @@ public class Java extends Task { | |||
| log("Java Result: " + err, Project.MSG_ERR); | |||
| } | |||
| } | |||
| maybeSetResultPropertyValue(err); | |||
| } finally { | |||
| dir = savedDir; | |||
| } | |||
| @@ -241,6 +244,27 @@ public class Java extends Task { | |||
| return cmdl.createArgument(); | |||
| } | |||
| /** | |||
| * The name of a property in which the return code of the | |||
| * command should be stored. Only of interest if failonerror=false. | |||
| * | |||
| * @since Ant 1.6 | |||
| */ | |||
| public void setResultProperty(String resultProperty) { | |||
| this.resultProperty = resultProperty; | |||
| } | |||
| /** | |||
| * helper method to set result property to the | |||
| * passed in value if appropriate | |||
| */ | |||
| protected void maybeSetResultPropertyValue(int result) { | |||
| String res = Integer.toString(result); | |||
| if (resultProperty != null) { | |||
| project.setNewProperty(resultProperty, res); | |||
| } | |||
| } | |||
| /** | |||
| * If true, execute in a new VM. | |||
| */ | |||
| @@ -62,7 +62,8 @@ import org.apache.tools.ant.*; | |||
| * stress out java task | |||
| * @author steve loughran | |||
| * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a> | |||
| */ | |||
| * @author <a href="mailto:donal@savvion.com">Donal Quinlan</a> | |||
| * */ | |||
| public class JavaTest extends BuildFileTest { | |||
| private boolean runFatalTests=false; | |||
| @@ -166,6 +167,15 @@ public class JavaTest extends BuildFileTest { | |||
| "Java returned:"); | |||
| } | |||
| public void testResultPropertyZero() { | |||
| executeTarget("testResultPropertyZero"); | |||
| assertEquals("0",project.getProperty("exitcode")); | |||
| } | |||
| public void testResultPropertyNonZero() { | |||
| executeTarget("testResultPropertyNonZero"); | |||
| assertEquals("-1",project.getProperty("exitcode")); | |||
| } | |||
| /** | |||
| * entry point class with no dependencies other | |||