Look in the archives (wherever they are) for posts with the subject "RE: Running <exec> tasks asynchronously on UNIX also on Windows?" for a patch to ANT that supports it already. It just extends <exec> with a new attribute. --DD
-----Original Message----- From: Marcus Ludvigson [mailto:[EMAIL PROTECTED]] Sent: Thursday, April 11, 2002 9:33 AM To: Ant Users List Subject: My solution on how to <exec> commands asyncronously in Windows Hi fellow Ant'ers. I originally started reading this list because I had problems with blocking tasks when using Ant, unfortunatly there seems like more have the same problem. This is my first post and my solution to this problem. I have modified code from Apache's Cactus-project to start a blocking task (a server for example) and fork it of in a thread so Ant can continue with other task. Hope this helps. /Marcus This i how my solution looks like in the build.xml-file: --------%<-----[build.xml]---------------- <taskdef name="startServer" classname="org.myorg.StartServerTask" classpath="${classpath}"/> <target name="BlockingTask"> <exec dir="C:\Server_dir" executable="cmd.exe"> <arg line="/c start server.cmd"/> </exec> </target> <target name="startServerAsync"> <startServer startTarget="BlockingTask"/> </target> --------%<-----[build.xml]---------------- --------%<-----[StartServerTask.java]---------------- package org.myorg; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Task; /** * An Ant Task that does the following : * * create a java thread, * * start another Ant target in that thread. This target must be a * blocking target. * * */ public class StartServerTask extends Task { /** * Helper class */ private StartServerHelper helper; /** * Initialization */ public void init() { this.helper = new StartServerHelper(this); } /** * @see Task#execute() */ public void execute() throws BuildException { this.helper.execute(); } /** * Ant will automatically call this method when the "startTarget" attribute * of our task is used. * * @param theStartTarget the Ant target to call */ public void setStartTarget(String theStartTarget) { this.helper.setStartTarget(theStartTarget); } } --------%<-----[StartServerTask.java]----------- --------%<-----[StartServerHelper.java]----------- package org.myorg;; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Task; import org.apache.tools.ant.taskdefs.CallTarget; /** * A helper class for an Ant Task that does the following : * * create a java thread, * * start another Ant target in that thread. This target must be a * blocking target. * * */ public class StartServerHelper implements Runnable { /** * The Ant target name that will start the blocking target. */ private String startTarget; /** * The tasks that wraps around this helper class */ private Task task; /** * @param theTask the Ant task that is calling this helper */ public StartServerHelper(Task theTask) { this.task = theTask; } /** * @see Task#execute() */ public void execute() throws BuildException { // Verify that a start target has been specified if (this.startTarget == null) { throw new BuildException("A startTarget Ant target name must " + "be specified"); } // Call the target in another thread. The called // target must be blocking. Thread thread = new Thread(this); thread.start(); // We're done ... Ant will continue processing other tasks } /** * The thread that calls the Ant target that starts, for example, a server. * Must be a blocking target. */ public void run() { // Call the Ant target using the "antcall" task. CallTarget callee; callee = (CallTarget) (this.task.getProject().createTask("antcall")); callee.setOwningTarget(this.task.getOwningTarget()); callee.setTaskName(this.task.getTaskName()); callee.setLocation(this.task.getLocation()); callee.init(); callee.setTarget(this.startTarget); callee.execute(); // Should never reach this point as the target is blocking, unless the // server is stopped. } /** * @param theStartTarget the Ant target to call */ public void setStartTarget(String theStartTarget) { this.startTarget = theStartTarget; } } --------%<-----[StartServerHelper.java]----------- -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
