2013-01-25 181 views
19

我已經在谷歌上看過這個,但似乎沒有任何關於Gradle站點的文檔,甚至沒有人在論壇中討論這個。Gradle顏色輸出

我在我的Mac(10.8.2,ML)上安裝了Gradle,並構建了一個自定義的build.gradle腳本。當我打電話給println()時,我想使輸出變成彩色(如紅色錯誤,綠色信息等)。我如何在我的gradle構建腳本中執行此操作?

這裏是代碼的例子,我有這麼遠:

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

this gradle forum,他們談論各種風格像正常的,頭,userinput,標識,說明書,progressstatus,失敗,信息和錯誤,如StyledTextOutput類的一部分。看起來這是一個內部類。有沒有一種簡單的方法來利用Gradle/Groovy的彩色打印功能,而無需導入大量的包?

回答

22

找到答案!根據this gradle forum post,沒有爲記錄器的輸出着色的公共接口。您可以自由使用內部類,但這些類可能會在將來的版本中更改。在gradle這個腳本,把頂部:

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

(我還沒有想出如何此移動到init.gradle文件)之後不久,定義

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

我我仍然不確定在create方法的字符串中需要什麼(它似乎沒有影響任何東西)。再後來在你的任務,

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

這應該與所有類別的運作正常,頭,userinput,標識,說明書,progressstatus,失敗,信息和錯誤。一個額外的步驟,如果你想自定義每個類別的顏色,添加以下到init.gradle文件在〜/ .gradle目錄(或other options):

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

然後更換「錯誤」類別與上面列表中的任何一個。

+0

看來,以創建參數是一個類別,類似於log4j的類別。例如,它可以是進行日誌記錄的類的名稱。該類別可以是String(如上)或Class。或者,可以提供DEGUG,INFO,WARN,ERROR,LIFECYCLE或QUIET的org.gradle.api.logging.LogLevel。最後,可以提供一個類別(作爲'String'或'Class')和'LogLevel'。 –

+0

我用上面的,並設置了'System.setProperty('org.gradle.logging.StyledTextOutput.Style.Success','GREEN')',我用它作爲 'out.withStyle(Style.Success).println配置。運行時)''但它不出來綠色(只是默認白色,爲我的Ubuntu GNOME終端)。對此行爲的任何見解? – Sonny

+0

如果有人想知道:'services'是'GradleInternal'和'ProjectInternal'的一個屬性。因爲我想使用Java編寫的Gradle插件的彩色輸出,所以我需要將'Gradle' /'Project'實例轉換爲其中一個內部接口來獲取服務屬性。 – Chriki

2

與搖籃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

這與接受的答案完全相同,超過4年後發佈,信息量更少,並且沒有與源代碼的鏈接。 – Raniz

+0

實際上,導入內容不同,超過4年後發佈的答案已過期。找到確切的答案並不容易。我找不到「與接受的答案相同」 – Bill

+0

由於只有進口已更改,因此您可以編輯接受的答案以使其更新 – Raniz