我已经在谷歌上看了这个,但似乎没有关于Gradle网站的任何文档,甚至是在论坛上讨论这个问题的人。
我在Mac上安装了Gradle(10.8.2,ML),并且正在构建自定义的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上,他们讨论了各种样式,如普通,标题,用户输入,标识符,描述,progressstatus,失败,信息和错误,作为StyledTextOutput类的一部分。看起来这是一个内部类。有没有一种简单的方法可以在不导入大量软件包的情况下利用Gradle / Groovy的彩色打印功能?
答案 0 :(得分:24)
找到答案!根据{{3}},没有用于着色记录器输出的公共接口。您可以自由使用内部类,但在将来的版本中可能会更改。在gradle脚本中,放在顶部:
较旧的Gradle :
import org.gradle.logging.StyledTextOutput;
import org.gradle.logging.StyledTextOutputFactory;
import static org.gradle.logging.StyledTextOutput.Style;
Gradle 3.3 + :
import org.gradle.internal.logging.text.StyledTextOutput;
import org.gradle.internal.logging.text.StyledTextOutputFactory;
import static org.gradle.internal.logging.text.StyledTextOutput.Style;
(我仍然没有想出如何将其移动到init.gradle文件。)然后不久,定义
def out = services.get(StyledTextOutputFactory).create("blah")
我仍然不确定create method的字符串中需要什么(它似乎没有影响任何东西)。然后在你的任务中,
out.withStyle(Style.Info).println('colored text')
这适用于所有类别:普通,标题,用户输入,标识符,描述,progressstatus,失败,信息和错误。如果要自定义每个类别的颜色,请添加以下步骤,将以下内容添加到〜/ .gradle目录(或this gradle forum post)中的init.gradle文件中:
System.setProperty('org.gradle.color.error', 'RED')
然后将“错误”类别替换为上面列表中的任何一个。
答案 1 :(得分:7)
只需其他信息即可完成接受的答案。这是gradle 4.10
StyledTextOutput.Style.values().each {
out.style(it).println("This line has the style $it")
}
此外,您可以创建多色线,例如StringBuilder
out.style(Style.ProgressStatus).text('This is ').style(Style.Failure).text('a multicolor ').style(Style.Identifier).println('line')
edit:这是一个有效的示例:
import org.gradle.internal.logging.text.StyledTextOutput
import org.gradle.internal.logging.text.StyledTextOutputFactory
import org.gradle.internal.logging.text.StyledTextOutput.Style
def out = services.get(StyledTextOutputFactory).create("an-ouput")
out.style(Style.ProgressStatus).text('This is ').style(Style.Failure).text('a multicolor ').style(Style.Identifier).println('line')
答案 2 :(得分:4)
使用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)
答案 3 :(得分:1)
是否有一种简单的方法可以利用Gradle / Groovy的彩色打印功能而无需导入很多包装?
为了探索更多选项,无需导入软件包,您可以只使用直接ANSI escape codes(不是严格的Gradle / Groovy技术)来格式化输出。以下是一个有效的示例:
task myTask {
def styler = 'black red green yellow blue magenta cyan white'
.split().toList().withIndex(30)
.collectEntries { key, val -> [(key) : { "\033[${val}m${it}\033[0m" }] }
doLast {
println "Message: ${styler['red']('Hello')} ${styler['blue']('World')}"
}
}
答案 4 :(得分:1)
使用 Kotlin 编写的自定义任务的简单示例:
import org.gradle.api.DefaultTask
import org.gradle.api.tasks.TaskAction
import org.gradle.internal.logging.text.StyledTextOutput
import org.gradle.internal.logging.text.StyledTextOutputFactory
import javax.inject.Inject
abstract class ExampleTask @Inject constructor(outputFactory: StyledTextOutputFactory) :
DefaultTask() {
private val out = outputFactory.create("example-task")
@TaskAction
fun run() {
out.style(StyledTextOutput.Style.Success)
.text("Hello, ")
.style(StyledTextOutput.Style.Failure)
.println("World!")
}
}
答案 5 :(得分:0)
类似的解决方案,由ToYonos在Kotlin DSL上撰写
val printStyles by tasks.registering {
doLast {
val out = project.serviceOf<org.gradle.internal.logging.text.StyledTextOutputFactory>().create("an-output")
org.gradle.internal.logging.text.StyledTextOutput.Style.values().forEach {
out.style(it).println("This line has the style $it")
}
}
}