2013-01-25 17 views
19

Ich habe dies bei Google nachgelesen, aber es scheint keine Dokumentation auf der Gradle-Seite zu geben, oder sogar Leute, die das in Foren diskutieren.Gradle Farbausgabe

Ich habe Gradle auf meinem Mac (10.8.2, ML) installiert und erstelle ein benutzerdefiniertes build.gradle-Skript. Wenn ich println() aufrufen möchte, möchte ich die Ausgabe farbig machen (wie Fehler in Rot, Info in Grün, etc). Wie mache ich das in meinem Skript zum Erstellen von Großbuchstaben?

Hier ist ein Beispiel von Code habe ich bisher:

def proc = "echo `DATE`".execute() 
proc.in.eachLine {line -> println line} 
proc.err.eachLine {line -> println 'ERROR: ' + line} 

Auf this gradle forum, sie sprechen über verschiedene Stile wie normal, Header, userinput, Bezeichner, Beschreibung, progressstatus, Versagen, Info, und Fehler, wie Teil der StyledTextOutput-Klasse. Es sieht so aus als wäre dies eine interne Klasse. Gibt es eine einfache Möglichkeit, die Farbdruck-Funktionen von Gradle/Groovy zu nutzen, ohne viele Pakete zu importieren?

Antwort

22

Die Antwort gefunden! Laut this gradle forum post gibt es keine öffentliche Schnittstelle zum Einfärben der Ausgabe des Loggers. Sie können die internen Klassen verwenden, diese können sich jedoch in zukünftigen Versionen ändern. Im gradle Skript, an der Spitze setzen:

import org.gradle.logging.StyledTextOutput; 
import org.gradle.logging.StyledTextOutputFactory; 
import static org.gradle.logging.StyledTextOutput.Style; 

(. Ich habe noch nicht herausgefunden, wie diese in die init.gradle Datei zu bewegen)

def out = services.get(StyledTextOutputFactory).create("blah") 

mich kurz nach Dann definieren bin immer noch nicht sicher, was in der Zeichenfolge der create-Methode sein muss (es scheint noch nichts zu beeinflussen). Dann später in Ihrer Aufgabe,

out.withStyle(Style.Info).println('colored text') 

Dies sollte mit allen Kategorien arbeiten: normal, header, userinput, Bezeichner, Beschreibung, progressstatus, Versagen, Info, und Fehler. Ein zusätzlicher Schritt, wenn Sie die Farbe der einzelnen Kategorien anpassen möchten, fügen Sie den folgenden auf eine init.gradle Datei in Ihrem ~/.gradle Verzeichnis (oder other options):

System.setProperty('org.gradle.color.error', 'RED') 

und dann den „Fehler“ Kategorie ersetzen mit irgendwelchen aus der obigen Liste.

+0

Es scheint, dass das Argument eine Kategorie zu erstellen, ähnlich einer log4j Kategorie. Es könnte beispielsweise der Name der Klasse sein, die die Protokollierung durchführt. Die Kategorie kann eine Zeichenfolge (wie oben) oder eine Klasse sein. Alternativ kann man eine 'org.gradle.api.logging.LogLevel' von' DEGUG', 'INFO',' WARN', 'ERROR',' LIFECYCLE' oder 'QUIET' liefern. Schließlich kann man sowohl eine Kategorie (als "String" oder "Class") als auch einen "LogLevel" angeben. –

+0

Ich habe das obige verwendet und 'System.setProperty ('org.gradle.logging.StylledTextOutput.Style.Success', 'GREEN')' gesetzt und es als 'out.withStyle (Style.Success) .println (configurations.runtime) 'aber es kommt nicht GRÜN raus (nur Standard weiß, für mein Ubuntu Gnome-Terminal). Irgendwelche Einblicke in dieses Verhalten? – Sonny

+0

Falls jemand sich fragen sollte: 'Dienste' sind eine Eigenschaft von' GradleInternal' und 'ProjectInternal'. Da ich die farbige Ausgabe eines in Java geschriebenen Gradle-Plugins verwenden wollte, musste ich eine 'Gradle' /' Project'-Instanz auf eine dieser internen Schnittstellen werfen, um die services -Eigenschaft zu erhalten. – Chriki

2

mit Gradle 3,3 import org.gradle.internal.logging.text.StyledTextOutput; import org.gradle.internal.logging.text.StyledTextOutputFactory;

def out = services.get(StyledTextOutputFactory).create("blah") out.withStyle(Style.Info).println("File-utils.gradle" + "," + str)

+0

Dies ist genau das gleiche wie die angenommene Antwort, mehr als 4 Jahre später, mit weniger Informationen und keine Links zu der Quelle. – Raniz

+0

Eigentlich ist der Import-Inhalt anders, und die Antwort, die mehr als 4 Jahre später gepostet wird, ist veraltet. Es ist nicht einfach, eine genaue Antwort zu finden. Und ich kann nicht "das gleiche wie die angenommene Antwort" finden – Bill

+0

Da nur die Importe geändert wurden, können Sie die akzeptierte Antwort bearbeiten, um sie auf den neuesten Stand zu bringen – Raniz

Verwandte Themen