2015-04-25 7 views
6

Eine dumme Frage, aber ich konnte nirgends eine Antwort finden.Apache Ant - Programmausgabe begleitet von "[java]" Tags

Momentan lernten wir Apache Ant und ich begannen mit einer sehr einfachen Build-Datei und einem Java-Projekt, das eine Zeile String auf die Konsole ausgibt. Dies ist das, was ausgegeben wird, wenn ich den Befehl

ant compile jar run

PS C:\Users\zayd\Desktop\Apps\pbox> ant compile jar run 
Buildfile: C:\Users\zayd\Desktop\Apps\pbox\build.xml 

compile: 
    [mkdir] Created dir: C:\Users\zayd\Desktop\Apps\pbox\build\classes 
    [javac] C:\Users\zayd\Desktop\Apps\pbox\build.xml:9: warning: 'includeantruntime' was not set, defaulting to build.s 
ysclasspath=last; set to false for repeatable builds 
    [javac] Compiling 8 source files to C:\Users\zayd\Desktop\Apps\pbox\build\classes 

jar: 
    [mkdir] Created dir: C:\Users\zayd\Desktop\Apps\pbox\build\jar 
    [jar] Building jar: C:\Users\zayd\Desktop\Apps\pbox\build\jar\Main.jar 

run: 
    [java] ~We'll go down in history~ 

BUILD SUCCESSFUL 
Total time: 1 second 

Gibt es eine Möglichkeit, die ‚[java]‘ Tags zu entfernen, die neben der Programmausgabe gedruckt werden?

Antwort

2

Standardmäßig können Sie nicht. Das Task-Präfix in der Ausgabe wird vom Protokollierungsmechanismus von Ant gesteuert, nicht von der Task java selbst. Es gibt also keine Möglichkeit, die Task-Verwendung java zu ändern, um diese Ausgabe zu entfernen.

Der einzige Weg ist, Ihre eigenen schreiben BuildLogger die Build-Ereignismeldungen anpassen, dann Ant anweisen, diese benutzerdefinierten Logger zu verwenden anstelle der DefaultLogger, die Ant standardmäßig verwendet. Siehe https://ant.apache.org/manual/listeners.html (der Link enthält einen Zeiger zum Schreiben eigener Listener und Logger).

Wenn Sie wirklich tun wollen und fragen dies nicht nur für Neugier, dann ist das hier ein Ausschnitt aus DefaultLogger genommen, die lokalisiert, wie ein Build-Ereignismeldung mit dem Task-Namen angemeldet ist:

/** 
* Logs a message, if the priority is suitable. 
* In non-emacs mode, task level messages are prefixed by the 
* task name which is right-justified. 
* 
* @param event A BuildEvent containing message information. 
*    Must not be <code>null</code>. 
*/ 
public void messageLogged(BuildEvent event) { 
    int priority = event.getPriority(); 
    // Filter out messages based on priority 
    if (priority <= msgOutputLevel) { 

     StringBuffer message = new StringBuffer(); 
     if (event.getTask() != null && !emacsMode) { 
      // Print out the name of the task if we're in one 
      String name = event.getTask().getTaskName(); 
      String label = "[" + name + "] "; 
Verwandte Themen