2013-06-11 14 views
8

Moim celem jest wydrukowanie komunikatu na konsoli za każdym razem, gdy uruchamiane jest zadanie idea, ale niestety komunikat jest drukowany za każdym razem, gdy coś się uruchomi. Dlaczego linie drukowania są uruchamiane, gdy zadanie idea nie jest uruchamiane? Jak wyświetlić komunikat tylko wtedy, gdy wykonywane jest zadanie idea?Drukowanie Gradle drukuje, gdy nie jest to nazywane

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 '*********************************************************' 
} 

Wyjście polecenia gradle hello

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

BUILD SUCCESSFUL 

Total time: 2.846 secs 

Rozwiązanie robocza

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

Zobacz także: [Gradle zawsze println z dowolnego zadania] (http://stackoverflow.com/questions/23288470/gradle-always-does-println-from-any-task) –

+1

@PaulVerest dzięki za linkowanie –

Odpowiedz

4

Trzeba będzie umieścić swoje println s do działania i dodać to do idea zadanie. Poniższy przykład pokazuje zastosowanie działań doFirst:

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

Jest konkretny powód kod jest wykonywany przed uruchomieniem zadania idea: Jest oceniany jako kod konfiguracji wykonywany podczas fazy konfiguracji Gradle's build lifecycle. W fazie wykonania wykonywane są tylko akcje. Zadanie to wykonuje twoje zadanie hello.

EDYTOWANIE: idea jest org.gradle.plugins.ide.idea.model.IdeaModel w tym kontekście, a nie zadaniem.

2

Jeśli chcesz wymusić stopniowanie drukowania niektórych wiadomości, ale tylko w fazie wykonywania, przenieś println polecenia do doFirst lub doLast. Przykład zadania War:

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