Hi Conor,
thanks a lot for your quick help - now it works!
I'm now using a simple Class.forName(), which works as well:
try {
// force class loading, so that no additional
build-event
// is triggered when the messageLogged()-method
// is invoced:
Class.forName( "org.apache.tools.ant.BuildEvent" );
} catch (ClassNotFoundException e) {
e.printStackTrace();
throw new BuildException("Unable to load BuildEvent
from the classpath.",
e);
}
Thanks again,
Robert
On Thursday 02 September 2004 09:53, Conor MacNeill wrote:
> Robert Virkus wrote:
> > Hi everyone,
> >
> > I am trying to substitute the original build logger in my task with Ant
> > 1.6.1. I have written a wrapper-class which just forwards the events to
> > the original build logger, which works fine as long as I don't try to
> > modify the build events. When I change a build event, however, Ant is
> > stopping the execution with the message "BUILD FAILED
> > Listener attempted to access System.out - infinite loop terminated"
>
> This is an interesting problem. Nothing you're doing sounds like a
> problem but somewhere something in your message handling is attempting
> to output a message. i.e. before one message has been delivered to the
> listeners something is attempting to send another. The message above
> gives the most common cause but it is in fact not the only possibility
> as I found when trying to sort out your problem.
>
> Since your logger is loaded by an AntClassLoader it is susceptible to
> any logging done by that classloader. In fact I reproduced your problem
> and here is the stack trace
>
> Listener attempted to access System.out - infinite loop terminated
> at
> org.apache.tools.ant.Project.fireMessageLoggedEvent(Project.java:1991)
> at
> org.apache.tools.ant.Project.fireMessageLogged(Project.java:2020)
> at org.apache.tools.ant.Project.log(Project.java:387)
> at
> org.apache.tools.ant.AntClassLoader.log(AntClassLoader.java:394) at
> org.apache.tools.ant.AntClassLoader.loadClass(AntClassLoader.java:974)
> at java.lang.ClassLoader.loadClass(ClassLoader.java:236)
> at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:303)
> at PolishLogger.messageLogged(PolishLogger.java:32)
>
> So the deferred classloading that is triggered in your messageLogged
> method causes the AntClassLoader to log a message (a class being loaded).
>
> The workaround is to trigger the class loading earlier. I changed the
> PolishLogger constructor as follows:
>
> public PolishLogger(BuildLogger realLogger, Project project)
> {
> this.logger = realLogger;
> BuildEvent event = new BuildEvent(project);
> String s = new String();
> StringBuffer sb = new StringBuffer();
> }
>
>
> Note that it is not easy to ensure you have got all the classes loaded.
> A better solution might be to not load the PolishLogger through the
> AntClassLoader.
>
> Conor
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
--
Robert Virkus
Enough Software
Vor dem Steintor 218
D-28203 Bremen
Germany
www.enough.de
[EMAIL PROTECTED]
SAY NO TO SOFTWARE PATENTS:
http://www.ffii.org
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]