FileDocCategorySizeDatePackage
Exit.javaAPI DocApache Ant 1.707375Wed Dec 13 06:16:20 GMT 2006org.apache.tools.ant.taskdefs

Exit

public class Exit extends org.apache.tools.ant.Task
Exits the active build, giving an additional message if available. The if and unless attributes make the failure conditional -both probe for the named property being defined. The if tests for the property being defined, the unless for a property being undefined. If both attributes are set, then the test fails only if both tests are true. i.e.
fail := defined(ifProperty) && !defined(unlessProperty)
A single nested<condition> element can be specified instead of using if/unless (a combined effect can be achieved using isset conditions).
since
Ant 1.2
ant.task
name="fail" category="control"

Fields Summary
private String
message
private String
ifCondition
private String
unlessCondition
private NestedCondition
nestedCondition
private Integer
status
Constructors Summary
Methods Summary
public voidaddText(java.lang.String msg)
Set a multiline message.

param
msg the message to display

        if (message == null) {
            message = "";
        }
        message += getProject().replaceProperties(msg);
    
public org.apache.tools.ant.taskdefs.condition.ConditionBasecreateCondition()
Add a condition element.

return
ConditionBase.
since
Ant 1.6.2

        if (nestedCondition != null) {
            throw new BuildException("Only one nested condition is allowed.");
        }
        nestedCondition = new NestedCondition();
        return nestedCondition;
    
public voidexecute()
Throw a BuildException to exit (fail) the build. If specified, evaluate conditions: A single nested condition is accepted, but requires that the if/unless attributes be omitted. If the nested condition evaluates to true, or the ifCondition is true or unlessCondition is false, the build will exit. The error message is constructed from the text fields, from the nested condition (if specified), or finally from the if and unless parameters (if present).

throws
BuildException on error

        boolean fail = (nestedConditionPresent()) ? testNestedCondition()
                     : (testIfCondition() && testUnlessCondition());
        if (fail) {
            String text = null;
            if (message != null && message.trim().length() > 0) {
                text = message.trim();
            } else {
                if (ifCondition != null && ifCondition.length() > 0
                    && getProject().getProperty(ifCondition) != null) {
                    text = "if=" + ifCondition;
                }
                if (unlessCondition != null && unlessCondition.length() > 0
                    && getProject().getProperty(unlessCondition) == null) {
                    if (text == null) {
                        text = "";
                    } else {
                        text += " and ";
                    }
                    text += "unless=" + unlessCondition;
                }
                if (nestedConditionPresent()) {
                    text = "condition satisfied";
                } else {
                    if (text == null) {
                        text = "No message";
                    }
                }
            }
            log("failing due to " + text, Project.MSG_DEBUG);
            throw ((status == null) ? new BuildException(text)
             : new ExitStatusException(text, status.intValue()));
        }
    
private booleannestedConditionPresent()
test whether there is a nested condition.

return
boolean.

        return (nestedCondition != null);
    
public voidsetIf(java.lang.String c)
Only fail if a property of the given name exists in the current project.

param
c property name

        ifCondition = c;
    
public voidsetMessage(java.lang.String value)
A message giving further information on why the build exited.

param
value message to output

        this.message = value;
    
public voidsetStatus(int i)
Set the status code to associate with the thrown Exception.

param
i the int status

        status = new Integer(i);
    
public voidsetUnless(java.lang.String c)
Only fail if a property of the given name does not exist in the current project.

param
c property name

        unlessCondition = c;
    
private booleantestIfCondition()
test the if condition

return
true if there is no if condition, or the named property exists

        if (ifCondition == null || "".equals(ifCondition)) {
            return true;
        }
        return getProject().getProperty(ifCondition) != null;
    
private booleantestNestedCondition()
test the nested condition

return
true if there is none, or it evaluates to true

        boolean result = nestedConditionPresent();

        if (result && ifCondition != null || unlessCondition != null) {
            throw new BuildException("Nested conditions "
                + "not permitted in conjunction with if/unless attributes");
        }

        return result && nestedCondition.eval();
    
private booleantestUnlessCondition()
test the unless condition

return
true if there is no unless condition, or there is a named property but it doesn't exist

        if (unlessCondition == null || "".equals(unlessCondition)) {
            return true;
        }
        return getProject().getProperty(unlessCondition) == null;