2013-05-03 6 views
6

Pewna ilość zadań Gradle, które napisałem, nie wymaga żadnego wejścia ani wyjścia. Z tego powodu te zadania zawsze otrzymują status UP-TO-DATE, gdy je wywołuję. Przykład:Wymuszanie wykonywania zadań w Gradle

task backupFile(type: Copy) << { 
    //Both parameters are read from the gradle.properties file 
    from file(adjusting_file.replaceAll("\"", "")) 
    into file(backupDestinationDirectory + "/main/") 

    println "[INFO] Main file backed up" 
} 

co skutkuje w następujący wynik:

:gradle backupFile 
:backupFile UP-TO-DATE 

Czy istnieje sposób, aby życie a (ny) zadanie do wykonania, niezależnie od czegokolwiek? Jeśli jest, czy jest również możliwe, aby przełączać wykonanie zadania (np. Informując skrypt kompilacji, które zadania mają zostać uruchomione, a które zadania należy zignorować)?

Nie mogę pominąć tagów <<, ponieważ może to spowodować wykonanie zawsze, co nie jest tym, czego pragnę.

Bardzo dziękuję z góry za twoje dane wejściowe.

+0

_I nie można pominąć << tagów, jako że spowodowałoby zadania zawsze execute_ => To nie jest poprawne, założę się, że ponieważ println oświadczenie pokazuje za każdym razem swój invoke Gradle na swojej kompilacji plik. Krótko mówiąc, '>>' służy do zdefiniowania ** akcji ** dla twojego zadania, dlatego też println będzie częścią tej akcji i będzie pokazywany tylko wtedy, gdy zadanie zostanie wykonane. Bez '>>' definiujesz konfigurację ** zadania **, dlatego twój println będzie pokazywany za każdym razem, ale nie oznacza to, że zadanie zostało wykonane, ale tylko zostało _konfigurowane_. – Attila

Odpowiedz

9

Zadania należy skonfigurować w fazie konfiguracji . Jednak konfigurujesz go w akcji zadania (<< { ... }), która działa w fazie wykonania . Ponieważ konfigurujesz zadanie zbyt późno, Gradle stwierdza, że ​​nie ma nic do zrobienia i drukuje UP-TO-DATE.

Poniżej znajduje się poprawne rozwiązanie. Ponownie, zalecam użycie doLast zamiast <<, ponieważ prowadzi to do bardziej regularnej składni i jest mniej prawdopodobne, że zostanie dodane/pominięte przypadkowo.

task backupFile(type: Copy) { 
    from file(adjusting_file.replaceAll("\"", "")) 
    into file(backupDestinationDirectory + "/main/") 
    doLast { 
     println "[INFO] Main file backed up" 
    } 
}  
+0

Czy to nie oznacza, że ​​zadanie jest zawsze * zawsze * wykonywane? –

+0

Nie, nie ma. Polecam, aby trochę się wycofać, przeczytać kilka pierwszych rozdziałów [Przewodnik użytkownika Gradle] (http://gradle.org/docs/current/userguide/userguide_single.html) i eksperymentować z próbkami w pełnej dystrybucji Gradle'a . –

0

staram się robić to przez wiele dni. Muszę utworzyć wiele słoików intermidate na etapie processResource. Po jednym należy utworzyć na etapie processResource.

processResources.dependsOn(packageOxygenApplet) //doesn't work 

task packageOxygenApplet (type: Jar) { 

    println '** Generating JAR..: ' + rsuiteOxygenAppletJarName 
     from(sourceSets.main.output) { 
      include "org/worldbank/rsuite/oxygen/**" 
     } 
     baseName = rsuiteOxygenAppletJarName 

     manifest { 
      attributes("Build-By": oxygenUsername, 
       "Specification-Title": "Oxygen World Bank Plugin") 
     } 
     destinationDir = file("src/main/resources/WebContent/oxygen") 

}