Download NetBeans!

20080123 Wednesday January 23, 2008

Control the Build Script Output

I've heard in various places that various people consider it a significant annoyance to see all the Ant output in the Output window when, for example, a build is performed:

Firstly, it's worth pointing out that you don't see ALL the Ant output. That's because ALL the Ant output includes the output produced by Ant targets that have names that start with a hyphen, although the Output window (as shown above) excludes all these targets. These are targets that can only be called by other targets, and not independently. In fact, if you were to see ALL the Ant output, the Output window above would have this content:

-pre-init
-init-private
-init-user
-init-project
-init-macrodef-property
-do-init
-post-init
-init-check
-init-macrodef-javac
-init-macrodef-junit
-init-macrodef-nbjpda
-init-debug-args
-init-macrodef-debug
-init-macrodef-java
-init-presetdef-jar
init:
deps-jar:
-pre-pre-compile
Created dir: /home/geertjan/NetBeansProjects/JavaApplication5/build/classes
-pre-compile
-compile-depend
-do-compile
Compiling 1 source file to /home/geertjan/NetBeansProjects/JavaApplication5/build/classes
-post-compile
compile:
-pre-jar
-pre-pre-jar
Created dir: /home/geertjan/NetBeansProjects/JavaApplication5/dist
-do-jar-with-manifest
-do-jar-without-manifest
-do-jar-with-mainclass
-do-jar-with-libraries
Building jar: /home/geertjan/NetBeansProjects/JavaApplication5/dist/JavaApplication5.jar
Not copying the libraries.
To run this application from the command line without Ant, try:
java -jar "/home/geertjan/NetBeansProjects/JavaApplication5/dist/JavaApplication5.jar"
-post-jar
jar:
BUILD SUCCESSFUL (total time: 0 seconds)

Secondly, to exclude EVERYTHING (i.e., ALL the targets), the org.apache.tools.ant.module.run.StandardLogger class would need to be rewritten to change this (possibly with an option in the Options window to toggle Ant output being printed/not printed).

Thirdly, however, today I came across an e-mail by Tom Wheeler to the dev@openide.netbeans.org mailing list, where he points to this FAQ that he recently wrote:

How can I override an instance in the Lookup?

I tried that exact same approach, to mask out the org.apache.tools.ant.module.run.StandardLogger. Guess what? It worked. In META-INF/Services, I have a file called org.apache.tools.ant.module.spi.AntLogger. It contains exactly this content:

org.netbeans.supersilentmode.NewLogger
#-org.apache.tools.ant.module.run.StandardLogger

Now, the standard logger will not be used. Instead, I have my own new logger, in a module called org.netbeans.supersilentmode which now provides the output, which could possibly simply be a happy little tune (or a sad one, for failed builds), as shown yesterday.

Jan 23 2008, 09:00:07 AM PST Permalink