2013-10-08 10 views
8

nel mio init.gradle hofunzione da init.gradle in script di build

... 
// 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()) 
} 

Nel mio build.gradle voglio fare qualcosa di simile:

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

Ma io ottenere "Could non trovare il metodo buildTime() per argomenti [] sul progetto radice ... "

Thx in anticipo!

risposta

6

Ottenuto la risposta dal supporto Gradle. http://goo.gl/5uYInH

forse aiuta qualcun altro ...

Il file di inizializzazione è un contesto diverso rispetto al file build.gradle. Ma si può estendere un oggetto di progetto (build.gradle delegati al) con una proprietà personalizzata o un metodo (utilizzando una chiusura):

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

questo è solo il genere di cose che fa impazzire la gente. fare qualcosa di semplice come un "include è irrimediabilmente ottuso. ps, credo anche che questo potrebbe essere stato risolto definendo' showBuildTime() 'nel contesto globale (" = "v." << "). –

+0

Sto usando la stessa soluzione, ma sai come chiamare un altro metodo definito in project.ext dal corpo buildTime()? – ATom

+0

Che ne dici delle funzioni con argomenti? –

Problemi correlati