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

时间:2018-04-05 01:30:20

标签: gradle gradle-plugin

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

但我很好奇其中一个Gradle类中是否存在直接静态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.");

    }

}

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

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

1 个答案:

答案 0 :(得分:1)

据我所知,Groovy Development Kit中没有这样的方法。我建议你不要写自己的。

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

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

如果您要求使用最流行的方式来记录消息,请查看the Gradle docs on logging

  

Gradle将写入标准输出的任何内容重定向到QUIET日志级别的日志系统。

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