在 Java 中编写 Gradle 插件时如何调用 println

How can I call println when writing a Gradle plugin in Java

我正在 Java 中编写一个 Gradle 插件,是的,我知道我可以只使用 System.out.println,或者只是将其编写在 Groovy 中。

但我很好奇 Gradle class 中是否存在直接静态 println 函数。我找不到一个。我想知道是否有这样的事情:

package org.gradlerocks;

import org.gradle.api.DefaultTask;
import org.gradle.api.tasks.TaskAction;

static import org.gradle.api.Something.println;


public class RockItTask extends DefaultTask {

    @TaskAction
    public void opine() {
        System.out.println("Yep. Gradle rocks.");

        // this would be groovy/gradle-ish:
        println("Yep. Gradle rocks.");

    }

}

我想知道是否有一些 Gradle class 带有静态 println 我可以导入。

否则我可以编写自己的静态 println 函数。但我想我会问社区看看是否已经存在。

据我所知,Groovy开发包中没有这个方法。我建议不要自己写。

即使您正在为 Gradle 开发一个插件,它自然可以在 Groovy 环境中工作,但对于这个项目,您正在使用 Java。在 Java 中,您使用 System.out.println(...)。如果你想以 Groovy-ish 风格开发你的插件,你应该使用 Groovy(例如结合 @CompileStatic)。在 Groovy 中,阅读代码时看到简单的 println(...) 语句会很自然,而在 Java 中则不会。读者可能会感到困惑或需要额外检查,这个方法来自哪里。还是您将 is(Object) 方法添加到所有 Java 类 只是为了让它们看起来 Groovy-ish?坚持你正在使用的语言并应用它的约定,而不是其他语言的约定。

请注意,即使 Groovy 向您的环境添加了更多自动导入,println(...) 也不是静态导入,而是 method on Object,添加为 Groovy JDK 增强(相当于 each(Closure))。

如果您要求最 gradle-ish 的消息记录方式,请查看 the Gradle docs on logging:

Gradle redirects anything written to standard output to its logging system at the QUIET log level.

为了获得更详细的日志体验,您的插件可以使用 Project 实例和每个 Task 实例提供的 Logger 实例来支持不同日志级别的日志记录。