Gradle println在未调用时打印

时间:2013-06-11 18:27:09

标签: 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 '*********************************************************'
}

输出命令gradle hello

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

BUILD SUCCESSFUL

Total time: 2.846 secs

工作解决方案

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

2 个答案:

答案 0 :(得分:6)

您需要将println置于操作中并将其添加到idea任务中。以下示例显示了doFirst操作的使用:

ideaProject.doFirst {
    println '*********************************************************'
    println '* You should open build.gradle as a native project from *'
    println '* within IntelliJ.                                      *'
    println '*********************************************************'
}

idea任务运行之前,您的代码执行的具体原因是:它被评估为在Gradle's build lifecycle的配置阶段执行的配置代码。在执行阶段仅执行操作。您的hello任务就是这样做的。

编辑:idea在此上下文中为org.gradle.plugins.ide.idea.model.IdeaModel,而不是任务。

答案 1 :(得分:3)

如果您想强制gradle打印某些消息但仅在执行阶段,请将println命令移至doFirstdoLast。战争任务的例子:

war {
    doFirst {
        println "Packing module/project to " + archiveName + " ..."
    }
    manifest {
        // attributes ... 
    }
    // other commands ...
    doLast {
        println "Packing done. See target directory."
    }
}