ant-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Erik Hatcher <jakarta-...@ehatchersolutions.com>
Subject Re: Application CLOSE after running org.apache.tools.ant.Main.main()
Date Fri, 20 Dec 2002 14:31:48 GMT
Joey Gibson wrote:
> On Fri, 20 Dec 2002 08:38:45 -0500, Erik Hatcher
> <jakarta-ant@ehatchersolutions.com> 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:ant-user-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:ant-user-help@jakarta.apache.org>


Mime
View raw message