2013-06-11 5 views
8

私の目標は、ideaタスクが実行されるたびにメッセージをコンソールに出力することですが、残念ながらメッセージは何かが実行されるたびに印刷されます。 ideaタスクが実行されていないときに印刷ラインが実行されるのはなぜですか? ideaタスクが実行されたときにのみメッセージを表示するにはどうすればよいですか?呼び出されていないときにGradle printlnが印刷されます

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

http://stackoverflow.com/questions/23288470/gradle-always-does-println-from-any-task –

+0

も参照してください:[Gradleのは、常に任意のタスクからprintlnをん]( http://stackoverflow.com/questions/23288470/gradle-always-does-println-from-any-task) –

+1

リンクのための@PaulVerestありがとう –

答えて

4

あなたは行動にあなたのprintln Sを入れて追加する必要がありますそれを0にするタスク。次の例では、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はであり、タスクではありません。

2

強制的にいくつかのメッセージを印刷する場合は、実行フェーズでのみprintlnコマンドをdoFirstまたはdoLastに移動します。戦争のタスクの例:

war { 
    doFirst { 
     println "Packing module/project to " + archiveName + " ..." 
    } 
    manifest { 
     // attributes ... 
    } 
    // other commands ... 
    doLast { 
     println "Packing done. See target directory." 
    } 
} 
関連する問題