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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to