10

私の目標は、タスクが実行されるたびにメッセージをコンソールに出力する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 '*********************************************************'
}
4

2 に答える 2

7

printlnをアクションに入れて、ideaタスクに追加する必要があります。次の例は、doFirstアクションの使用を示しています。

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

タスクが実行される前にコードが実行される特定の理由があります。これは、 Gradle のビルド ライフサイクルのidea構成フェーズで実行される構成コードとして評価されます。実行フェーズでは、アクションのみが実行されます。あなたの仕事はそれを行います。hello

EDIT:このコンテキストにideaありorg.gradle.plugins.ide.idea.model.IdeaModel、タスクではありません。

于 2013-06-11T20:45:07.317 に答える
3

If You want to force gradle to print some messages but only in execution phase, move println commands to doFirst or doLast. Example for war task:

war {
    doFirst {
        println "Packing module/project to " + archiveName + " ..."
    }
    manifest {
        // attributes ... 
    }
    // other commands ...
    doLast {
        println "Packing done. See target directory."
    }
} 
于 2014-08-06T11:52:28.760 に答える