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> | returncode other than 0. Default is "false"</td> | ||||
| <td align="center" valign="top">No</td> | <td align="center" valign="top">No</td> | ||||
| </tr> | </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> | <tr> | ||||
| <td valign="top">dir</td> | <td valign="top">dir</td> | ||||
| <td valign="top">The directory to invoke the VM in. (ignored if | <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 | forked VM via nested <i>env</i> elements. See the description in the | ||||
| section about <a href="exec.html#env">exec</a></p> | section about <a href="exec.html#env">exec</a></p> | ||||
| <p>Settings will be ignored if fork is disabled.</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> | <h3>Examples</h3> | ||||
| <pre> | <pre> | ||||
| <java classname="test.Main"> | <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, | JVM, as it takes different parameters for other JVMs, | ||||
| That JVM can be started from <exec> if required. | That JVM can be started from <exec> if required. | ||||
| <hr> | <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> | Reserved.</p> | ||||
| </body> | </body> | ||||
| @@ -89,5 +89,26 @@ | |||||
| </java> | </java> | ||||
| </target> | </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" /> | <target name="foo" /> | ||||
| </project> | </project> | ||||
| @@ -75,6 +75,7 @@ import org.apache.tools.ant.types.Reference; | |||||
| * @author Stefano Mazzocchi | * @author Stefano Mazzocchi | ||||
| * <a href="mailto:stefano@apache.org">stefano@apache.org</a> | * <a href="mailto:stefano@apache.org">stefano@apache.org</a> | ||||
| * @author Stefan Bodewig | * @author Stefan Bodewig | ||||
| * @author <a href="mailto:donal@savvion.com">Donal Quinlan</a> | |||||
| * | * | ||||
| * @since Ant 1.1 | * @since Ant 1.1 | ||||
| * | * | ||||
| @@ -91,6 +92,7 @@ public class Java extends Task { | |||||
| private boolean append = false; | private boolean append = false; | ||||
| private Long timeout = null; | private Long timeout = null; | ||||
| private Redirector redirector = new Redirector(this); | private Redirector redirector = new Redirector(this); | ||||
| private String resultProperty; | |||||
| /** | /** | ||||
| * Do the execution. | * Do the execution. | ||||
| */ | */ | ||||
| @@ -106,6 +108,7 @@ public class Java extends Task { | |||||
| log("Java Result: " + err, Project.MSG_ERR); | log("Java Result: " + err, Project.MSG_ERR); | ||||
| } | } | ||||
| } | } | ||||
| maybeSetResultPropertyValue(err); | |||||
| } finally { | } finally { | ||||
| dir = savedDir; | dir = savedDir; | ||||
| } | } | ||||
| @@ -241,6 +244,27 @@ public class Java extends Task { | |||||
| return cmdl.createArgument(); | 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. | * If true, execute in a new VM. | ||||
| */ | */ | ||||
| @@ -62,7 +62,8 @@ import org.apache.tools.ant.*; | |||||
| * stress out java task | * stress out java task | ||||
| * @author steve loughran | * @author steve loughran | ||||
| * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a> | * @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 { | public class JavaTest extends BuildFileTest { | ||||
| private boolean runFatalTests=false; | private boolean runFatalTests=false; | ||||
| @@ -166,6 +167,15 @@ public class JavaTest extends BuildFileTest { | |||||
| "Java returned:"); | "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 | * entry point class with no dependencies other | ||||