首页 > 解决方案 > Gradle 彩色输出(不再有 project.serviceOf() 或 services() api 方法)

问题描述

我从 gradle groovy 迁移到 gradle kotlin 构建脚本。

我曾经按照stackoverflow答案中的建议进行彩色输出

但是从 gradle 6.x 和 kotlin dsl 开始,这似乎不再起作用了。

services...project.serviceOf<>()方法似乎不存在(不再/或在 kotlin dsl 中)。

关于如何从 kotlin build.gradle.kts 任务获得彩色控制台输出的任何想法?

标签: gradlekotlinbuild

解决方案


我不知道是否可以使用 DSL 在临时任务中获取服务注册表。但是,如果您可以将任务实现为具体类(如果您愿意,仍然可以在 DSL 中完成),您甚至可以注入内部 Gradle 服务。

对于 Kotlin 类,它可能如下所示:

import org.gradle.api.DefaultTask
import org.gradle.api.tasks.TaskAction
import org.gradle.internal.logging.text.StyledTextOutput.Style
import org.gradle.internal.logging.text.StyledTextOutputFactory
import javax.inject.Inject

open class MyTask @Inject constructor(private val styledTextOutputFactory: StyledTextOutputFactory) : DefaultTask() {
    @TaskAction
    fun doStuff() {
        val out = styledTextOutputFactory.create(javaClass.name)
        out.withStyle(Style.Info).println("colored text")
    }
}

tasks.register<MyTask>("myTask") // DSL

推荐阅读