我的目标是在运行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 '*********************************************************'
}
答案 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
命令移至doFirst
或doLast
。战争任务的例子:
war {
doFirst {
println "Packing module/project to " + archiveName + " ..."
}
manifest {
// attributes ...
}
// other commands ...
doLast {
println "Packing done. See target directory."
}
}