31

私はこれを Google で調べましたが、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}

このgradle forumでは、StyledTextOutput クラスの一部として、normal、header、userinput、identifier、description、progressstatus、failure、info、error などのさまざまなスタイルについて話しています。これは内部クラスのようです。多くのパッケージをインポートせずに Gradle/Groovy のカラー印刷機能を利用する簡単な方法はありますか?

4

6 に答える 6

30

答えが見つかりました!この gradle フォーラムの投稿によると、ロガーの出力を色付けするためのパブリック インターフェイスはありません。内部クラスは自由に使用できますが、将来のバージョンで変更される可能性があります。gradle スクリプトでは、先頭に次のように記述します。

古いグラドル

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

グラドル 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')

これは、通常、ヘッダー、ユーザー入力、識別子、説明、進行状況、失敗、情報、およびエラーのすべてのカテゴリで機能するはずです。各カテゴリの色をカスタマイズする場合の追加の手順として、 ~/.gradle ディレクトリ (またはその他のオプション)の init.gradle ファイルに以下を追加します。

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

次に、「エラー」カテゴリを上記のリストのいずれかに置き換えます。

于 2013-01-25T09:03:05.527 に答える
3

多くのパッケージをインポートせずに 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')}"
    }
}

GitHub の完全なコード

于 2019-05-14T23:22:02.877 に答える
1

Kotlin DSL で書かれた ToYonos によって提案された同様のソリューション

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")
        }
    }
}
于 2019-12-24T10:36:03.987 に答える