2013-01-25 99 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