Gradle цветной вывод
Я посмотрел это на Google, но на сайте Gradle, даже если люди обсуждают это на форумах, похоже, нет никакой документации.
У меня есть Gradle, установленный на моем Mac (10.8.2, ML), и я создаю пользовательский build.gradle script. Когда я вызываю println(), я хотел бы сделать вывод цветным (например, ошибки в красном, информация в зеленом и т.д.). Как это сделать в моей Gradle сборке script?
Вот пример кода, который у меня есть до сих пор:
def proc = "echo `DATE`".execute()
proc.in.eachLine {line -> println line}
proc.err.eachLine {line -> println 'ERROR: ' + line}
В этот Gradle форум, они говорят о различных стилях, таких как normal, header, userinput, identifier, description, progressstatus, failure, info, и ошибка, как часть класса StyledTextOutput. Похоже, что это внутренний класс. Есть ли простой способ использовать возможности цветной печати Gradle/Groovy без импорта большого количества пакетов?
Ответы
Ответ 1
Нашел ответ! Согласно этому посту на форуме, нет открытого интерфейса для раскраски вывода логгера. Вы можете использовать внутренние классы, но они могут измениться в будущих версиях. В скрипте 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 (похоже, это еще ни на что не влияет). Тогда позже в вашей задаче,
out.withStyle(Style.Info).println('colored text')
Это должно работать со всеми категориями: нормальный, заголовок, пользовательский ввод, идентификатор, описание, статус выполнения, сбой, информация и ошибка. Дополнительный шаг, если вы хотите настроить цвет каждой категории, добавьте следующее в файл init.gradle в вашем каталоге ~/.gradle (или другие параметры):
System.setProperty('org.gradle.color.error', 'RED')
и затем замените категорию "ошибка" любой из списка выше.
Ответ 2
Просто дополнительная информация, дополняющая принятый ответ. Вот стили по умолчанию с gradle 4.10
StyledTextOutput.Style.values().each {
out.style(it).println("This line has the style $it")
}
![all styles]()
Более того, вы можете создать многоцветную линию, как StringBuilder
out.style(Style.ProgressStatus).text('This is ').style(Style.Failure).text('a multicolor ').style(Style.Identifier).println('line')
![multicolor]()
редактировать: вот рабочий пример:
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')
Ответ 3
С 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)
Ответ 4
Есть ли простой способ задействовать возможности цветной печати Gradle/Groovy без импорта большого количества пакетов?
В целях изучения дополнительных возможностей без импорта пакетов вы можете просто использовать прямые управляющие коды ANSI (не строго технологию 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')}"
}
}