We've already discussed various schemes for expanding the conditional execution of targets, most recently by allowing conditions as top-level children of targets. Check the archives.
____________________________________________________________________________________________ Jeffrey E. (Jeff) Care ca...@us.ibm.com IBM WebSphere Application Server WAS Release Engineering Benjamin de Dardel <benjamin.dedar...@gmail.com> wrote on 06/22/2009 05:54:32 PM: > [image removed] > > discussion about conditional structures > > Benjamin de Dardel > > to: > > Ant Developers List > > 06/22/2009 05:55 PM > > Please respond to "Ant Developers List" > > Hi all, > > I suppose that there have been a lot of discussion about conditional > structures, but I would like to open another one. > For now, I notice two solutions : > > >> solution 1 : ant approach, using if and unless parameters. > <target name="todo" depends="ok,ko"/> > <target name="ok" if="my-property-is-set"/> > <target name="ko" unless="my-property-is-NOT-set"/> > Disadvantages : > - not as simple as it should be > - property evaluation is not possible (or I don't know how to do this) > > >> solution 2 : ant-contrib > <if> > <equals arg1="..." arg2="..."/> > </if> > Disadvantages : > - verbose solution > - project still maintain ? > - solution not integrated in the ant project > > >> solution 3 > I would like to discuss about another solution, based upon <antcall> > et <condition> tasks. > <antcall target="todo"> > <condition> > <equals arg1="${val1}" arg2="${val2}"/> > </condition> > </antcall> > Target would be executed if condition succeeded. > > Advantages : > + use an existing task : <antcall> by adding a nested element > => quiet easy to implement (see attached file) > + use all <condition> possibilities > > What do you think about this idea ? > > Best regards, > Benjaminpackage net.sourceforge.ant4hg.contrib; > > import org.apache.tools.ant.BuildException; > import org.apache.tools.ant.taskdefs.CallTarget; > import org.apache.tools.ant.taskdefs.condition.Condition; > import org.apache.tools.ant.taskdefs.condition.ConditionBase; > > public class CallTarget2 extends CallTarget { > > // ////////////////////////////////////////////// > // INNER CLASS > // ////////////////////////////////////////////// > /** > * @see org.apache.tools.ant.taskdefs.Exit > */ > private static class NestedCondition extends ConditionBase > implements Condition { > public boolean eval() { > if (countConditions() != 1) { > throw new BuildException("A single nested condition > is required."); > } > return ((Condition) (getConditions().nextElement())).eval(); > } > } > > // ////////////////////////////////////////////// > // ATTRIBUTES > // ////////////////////////////////////////////// > /** > * @see org.apache.tools.ant.taskdefs.Exit > */ > private NestedCondition nestedCondition; > > /** > * @see org.apache.tools.ant.taskdefs.Exit > */ > public ConditionBase createCondition() { > if (nestedCondition != null) { > throw new BuildException("Only one nested condition is allowed."); > } > nestedCondition = new NestedCondition(); > return nestedCondition; > } > > // ////////////////////////////////////////////// > // CONSTRUCTORS > // ////////////////////////////////////////////// > public CallTarget2() { > super(); > setTaskName("antcall"); > } > > // ////////////////////////////////////////////// > // OVERRIDEN METHODS > // ////////////////////////////////////////////// > public void execute() throws BuildException { > if (!nestedCondition.eval()) { > return; > } > super.execute(); > } > > } > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org > For additional commands, e-mail: dev-h...@ant.apache.org