Gradle println在未调用时打印

Mik*_*der 10 gradle

我的目标是在idea任务运行时向控制台打印一条消息,但不幸的是,只要运行任何内容,就会打印消息.为什么在idea没有运行任务时执行打印行?如何仅在idea执行任务时显示消息?

的build.gradle

apply plugin: 'idea'

task hello << {
    println 'Hello world!'
}

tasks.idea() {
    println '*********************************************************'
    println '* You should open build.gradle as a native project from *'
    println '* within IntelliJ.                                      *'
    println '*********************************************************'
}
Run Code Online (Sandbox Code Playgroud)

输出命令 gradle hello

*********************************************************
* You should open build.gradle as a native project from *
* within IntelliJ.                                      *
*********************************************************
:hello
Hello world!

BUILD SUCCESSFUL

Total time: 2.846 secs
Run Code Online (Sandbox Code Playgroud)

工作方案

tasks.getByPath('idea') << {
    println '*********************************************************'
    println '* You should open build.gradle as a native project from *'
    println '* within IntelliJ.                                      *'
    println '*********************************************************'
}
Run Code Online (Sandbox Code Playgroud)

Ben*_*hko 7

您将需要将printlns放入一个动作中并将其添加到idea任务中。以下示例显示了该doFirst操作的用法:

ideaProject.doFirst {
    println '*********************************************************'
    println '* You should open build.gradle as a native project from *'
    println '* within IntelliJ.                                      *'
    println '*********************************************************'
}
Run Code Online (Sandbox Code Playgroud)

您的代码在idea运行任务之前已执行是有特定原因的:它被评估为在Gradle构建生命周期的配置阶段执行的配置代码。在执行阶段仅执行动作。你的hello任务可以做到这一点。

编辑:ideaorg.gradle.plugins.ide.idea.model.IdeaModel在这种背景下,而不是任务。