Thanks. That is very helpfull !

-mj-



-----Original Message-----
From: Erik Hatcher [mailto:[EMAIL PROTECTED]]
Sent: Friday, December 20, 2002 10:32 PM
To: Ant Users List
Subject: Re: Application CLOSE after running
org.apache.tools.ant.Main.main()


Joey Gibson wrote:
> On Fri, 20 Dec 2002 08:38:45 -0500, Erik Hatcher
> <[EMAIL PROTECTED]> wrote:
> 
> ||| Ant's Main.main calls System.exit, that is why.
> 
> I got bitten by a System.exit() call a while back (not Ant's main, but
> another). I was wrapping a local utility in an Ant task and while the
task
> ran and the tool did its job, Ant would just abort with no errors, no
> messages, nothing. After a little fiddling I discovered it was a call
to
> exit(). Is the reason for Ant's main calling System.exit() simply to
return
> an exit code to the OS? That's what it looks like. A cursory glance at
> Ant's Main.start() method looks like one could use the
> additionalUserProperties element to pass a property like "exit=true"
or
> something like that and then Ant could check that before calling
> System.exit(). 

Yes, I'm pretty sure thats the primary (only?) reason for the call to 
System.exit.

But it seems folks should be integrating with Ant by emulating what 
Main.main does rather than simply invoking it directly.  I've toyed with

writing a servlet that ran Ant once upon a time.  I just dug up the code

and here it is:

     final Project project = new Project();
     AntListener listener = new AntListener();
     project.addBuildListener(listener);
     File buildFile = new File(buildFile);

     Throwable exception = null;
     try {
       project.fireBuildStarted();
       project.init();
       ProjectHelper.configureProject(project, buildFile);
       project.executeTarget(project.getDefaultTarget());
     }
     catch (BuildException e) {
       exception = e;
     }
     finally {
       project.fireBuildFinished(exception);

       Writer out = response.getWriter();
       out.write(listener.getLog());
     }

AntListener is just a BuildListener implementing class that collects all

the log messages for grabbing later (in the finally clause).  This is 
just a simple example, and one that probably needs lots of improvement 
to be solid, but its better than calling Main.main, IMO.

        Erik


--
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]>

Reply via email to