2013-10-08 10 views
8

w moim init.gradle mamFunkcja z init.gradle w kompilacji skryptu

... 
// the last thing in init.gradle 
def buildTime() { 
    def df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'") //you can change it 
    df.setTimeZone(TimeZone.getTimeZone("UTC")) 
    return df.format(new Date()) 
} 

W moim build.gradle chcę zrobić coś takiego:

task showTime() << { 
    println buildTime() 
} 

Ale otrzymuję „Could nie znaleziono metody buildTime() dla argumentów [] na głównym projekcie ... "

Thx z góry!

Odpowiedz

6

Otrzymałem odpowiedź od Gradle-Support. http://goo.gl/5uYInH

Może to pomoże ktoś inny ...

Plik init jest inny kontekst niż plik build.gradle. Ale można rozszerzyć przedmiot projektu (build.gradle delegatów) o dostosowanej właściwości lub metody (stosując zamknięcie):

init.gradle

import java.text.SimpleDateFormat 
gradle.allprojects{ 
    ext.buildTime = { 
    def df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'") 
    df.setTimeZone(TimeZone.getTimeZone("UTC")) 
    return df.format(new Date()) 
    }  
} 

build.gradle

task showBuildTime() << { 
    println buildTime() 
} 
+2

to jest właśnie to, co powoduje, że ludzie są szaleni. robienie czegoś tak prostego, jak "zawarcie jest beznadziejnie rozwarte" ps, uważam też, że można to rozwiązać przez zdefiniowanie 'showBuildTime()' w kontekście globalnym ("=" v. "<<"). –

+0

Używam Ale czy wiesz jak wywołać inną metodę zdefiniowaną w project.ext z ciała buildTime()? – ATom

+0

Co z funkcjami z argumentami? –

Powiązane problemy