ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Alexey N. Solofnenko" <A.Solofne...@mdl.com>
Subject Re: [NEW TASK PROPOSAL] onceonly
Date Fri, 30 Apr 2004 14:17:23 GMT
Hello Peter,

  It seems like a work-around of another serious issue - <ant>&Co should 
not be used at all when there is a chance that some tasks will be 
executed twice or more times. There are now other mechanisms that work 
better - <import> and <macrodef>.

- Alexey.

Peter Reilly wrote:

> For my site antlib, I am currently using a task <onceonly>
> which may be usefull to have as a std ant task (or ant-contrib task).
> The idea is that the task will only be run  once, even if
> called multiple times (via ant, antcall, subant - indirectly
> via import).
>
> For example:
>
> <project default="caller">
>  <onceonly>
>     <echo>Initializing Project</echo>
>     <!-- some complicated list of initializing tasks -->
>  </onceonly>
>
>  <target name="caller">
>      <echo>In call</echo>
>      <antcall target="callee"/>
> </target>
>
> <target name="callee">
>    <echo>In callee</echo>
>  </target>
>
> <project>
>
>
> Peter
>
>
>------------------------------------------------------------------------
>
>package net.sf.antextra;
>import java.util.Set;
>import java.util.HashSet;
>import java.util.Collections;
>import org.apache.tools.ant.taskdefs.Sequential;
>
>/**
> * Ant task to run a sequence of tasks only
> * once.
> * Usefull for setting up stuff in files that may
> * be called a number of times (via ant or import
> * for example).
> */
>public class OnceOnly extends Sequential {
>    private static Set locations = new HashSet();
>
>    /**
>     * Execute the list of nested tasks by calling
>     * super.execute() if this location has not been
>     * seen before.
>     */
>    public void execute() {
>        String location = getLocation().toString();
>        synchronized(locations) {
>            if (locations.contains(location)) {
>                return; // Do nothing, action already done
>            }
>            locations.add(location);
>        }
>        super.execute();
>    }
>}
>
>  
>
>------------------------------------------------------------------------
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
>For additional commands, e-mail: dev-help@ant.apache.org
>  
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org


Mime
View raw message