ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
Subject [PATCH] build events
Date Mon, 19 Jun 2000 02:30:49 GMT
ok, here's a first attempt to add events to Ant. The basic idea is to keep
the core build engine "clean" and free of any presentation logic, and to
make it easier to extend Ant with other features without cluttering up the
core. To do this, I've defined a BuildListener interface and added an
"addBuildListener" method to Project that can be used to register listener
objects. Listeners could be implemented to generate reports, send out
emails when the build is complete, create a bill of materials, etc...

The only new functionality visible to the end-user is a "-listener" option
on the command line that will let you specify the name of a class. An
instance of this class will be added as a listener to the project. I've
included a listener that will generate an XML log file, which you can use
by typing the command below. I've also included a simple stylesheet to
display the generated XML:

build -listener

(See attached file: events.jar)

Matt Foemmel
ThoughtWorks, Inc.
----- Forwarded by Matthew P Foemmel/Corporate/ThoughtWorks/US on
06/18/2000 05:51 AM -----
                    Matthew P                                                            
                    Foemmel              To:              
                    06/14/2000           Subject:     build events                       
                    05:39 PM                                                             

I've made a few changes to Ant for my project here, and I'd like some
feedback on whether its worth cleaning up and submitting as a patch.
Basically, we needed a way to generate an XML file with a summary of what
errors happened during the build. To do this cleanly, I ended up
implementing event/listener classes so that one can add listeners to a
project and be notified when various things happen. The classes look
something like:

public class BuildEvent extends java.util.EventObject {
     public Project getProject();
     public Target getTarget();
     public Task getTask();
     public Throwable getException();
     public String getMessage();
     public int getMessageLevel();

public interface BuildListener extends java.util.EventListener {
     public void buildStarted(BuildEvent event);
     public void buildFinished(BuildEvent event);

     public void targetStarted(BuildEvent event);
     public void targetFinished(BuildEvent event);

     public void taskStarted(BuildEvent event);
     public void taskFinished(BuildEvent event);

     public void messageLogged(BuildEvent event);

public class Project {
     public void addBuildListener(BuildListener listener);

Then I simply defined an XmlLogger class that dumped whatever XML I wanted
into a file, and added it as a listener to the Project. I was also able to
move all of the "user interface" code for Ant (ie all of the out.println
()'s) into so that it was all in one place by making it a
BuildListener. The makes the rest of the code cleaner if we want to create
a gui version of Ant, say. It also makes it easy to create listeners to do
profiling, debugging, etc...

Is this worth pursuing?

View raw message