A good way to do it is to re-use the <java> task internally, and set the
fork mode on it. Here's an example that is actually a straight
cut-and-paste from our "Writing Ant tasks" chapter:
public void execute() throws BuildException {
Java javaTask = null;
javaTask = (Java) project.createTask("java");
javaTask.setTaskName("search");
javaTask.setClassname("org.example.antbook.tasks.Searcher");
javaTask.setClasspath(classpath);
javaTask.createArg().setFile(indexDir);
javaTask.createArg().setValue(query);
javaTask.setFork(true);
if (javaTask.executeJava() != 0) {
throw new BuildException("error");
}
}
I have setters on my task that take the indexDir (java.io.File) and query
(String), as well as allowing nested classpath and classpath/classpathref
attributes.
Erik
----- Original Message -----
From: "Scott Ellsworth" <[EMAIL PROTECTED]>
To: "Ant List" <[EMAIL PROTECTED]>
Sent: Tuesday, May 28, 2002 10:57 PM
Subject: Hi, all. How do I protect myself from System.exit?
> Hi, all.
>
> I have a task that I have written that calls the main method of a java
> class after doing some parameter munging. This main method does a
> System.exit. I cannot easily rewrite that part of the code, so I need
> to work around it.
>
> I presume the "right way" is to just fork. I looked at the docs, and it
> indicates that Java and ExecuteJava will handle this, but I kind of
> foundered looking at the taskdef javadocs for Java and ExecuteJava.
>
> Assuming I have a Task already written with a stack of instance
> variables, getters, setters, and a working execute method that ends with
> a call to the main class of the thing I am wrapping.
>
> Can anyone point me to how I need to modify this to use the appropriate
> fork code? What follows is my best attempt, but the call appears to not
> have the same classpath as the task that spawned it.
>
> public class AntIntercalateTask extends Task {
> boolean _theParam=false
> public void setTheParam(boolean theParam)
> {
> _theParam=setTheParam;
> }
> public AntIntercalateTask()
> {
> }
> execute()
> {
> // worked, save for System.exit
> //String[] args={"param1", "value1"};
> //com.Foo.main(args);
>
> // cannot find classpath
>
> CommandlineJava cmdline = new CommandlineJava();
> cmdline.createArgument().setValue("param1");
> cmdline.createArgument().setValue("value1");
> prepareArguments(cmdline);
> cmdline.setClassname("com.Foo");
>
> Execute exe=new Execute();
> exe.setCommandline(cmdline.getCommandline());
> try{
> exe.execute();
> } catch (Exception e){
> System.out.println(e);
> }
> }
> }
>
> So, how can I transplant the classpath from the taskdef?
>
> Scott
>
>
> --
> To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
>
>
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>