Ok here's a little more context.
It seems that the exec/spawn=true command works as expected when
called on its own directly from java.exe
but not from an intermediate ant java task, so:
1. GOOD... When I launch the cmd.exe from a programmatic ant exec
task, the exec task and java.exe both complete, and the dos window
remains until I close it ( I've left a large gap in the chain
description so it lines up with the next example):
java.exe ---
>
ant
-exec (spawn=true) ---> cmd.exe
(terminates before dos cmd.exe window is closed)
2. BAD... When I insert an programmatic ant java task, the exec task
appears to complete but the ant java task doesn't. Then when
I close the dos window the java.exe process completes also. This is
despite the ant-exec spawn attribute being true.
java.exe ---> ant-java (fork=true, spawn=false) ---> ant-
exec (spawn=true) ---> cmd.exe
(terminates only when dos cmd.exe window is closed)
I know it looks a little unusual to have the extra ant-java task in
there but it is necessary for my use-case and I don't have
the option to set spawn to true for it. Any ideas?
Many Thanks
- Ashley
On 24 Apr 2009, at 13:20, Ashley Williams wrote:
Hi,
I would like to know how to start a batch file in a new dos window
without blocking the java process and so naturally I
tried the following that does work:
<project name="project" default="target" basedir=".">
<target name="target">
<exec executable="cmd" spawn="true" dir="${basedir}">
<arg value="/c"/>
<arg value="start"/>
<arg value="test.bat"/>
</exec>
</target>
</project>
However I need to be able to do this from java and so I used the
following snippet of code that I thought would
represent the same functionality as the ant script:
public static void main(String[] args) throws IOException {
// top level project
Project project = new Project();
project.setName("project");
project.init();
// project has a target child
Target target = new Target();
target.setName("target");
project.addTarget(target);
// target has an exec child
ExecTask execTask = new ExecTask();
execTask.setProject(project);
target.addTask(execTask);
execTask.setExecutable("cmd.exe");
execTask.setSpawn(true);
execTask.setDir(new File("."));
addArg(execTask, "/c");
addArg(execTask, "start");
addArg(execTask, "test.bat");
target.execute();
}
However it doesn't matter whether or not I set true of false for the
spawn property the java process blocks
every time until I close the dos window by hand. Is there something
else I need to do to more closely
replicate the ant script?
Cheers
- Ashley
---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscr...@ant.apache.org
For additional commands, e-mail: user-h...@ant.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscr...@ant.apache.org
For additional commands, e-mail: user-h...@ant.apache.org