2016-06-30 39 views
8

Recentemente ho iniziato a lavorare con gradle. Ho scoperto abbastanza presto che si può facilmente dire Gradle per rilevare automaticamente la versione attuale con il seguente frammento:Riesegui processoRisura le modifiche alle variabili

def getVersionName = { -> 
    def stdout = new ByteArrayOutputStream() 
    exec { 
    commandLine 'git', 'describe', '--dirty=-SNAPSHOT' 
    standardOutput = stdout 
    } 
    return stdout.toString().trim() 
} 

version = getVersionName() 

L'ho scoperto che è possibile sostituire tale numero di versione nelle vostre risorse in questo modo:

processResources { 
    expand(version: version) 
} 

E nei file che si desidera avere il numero di versione o meno così (dovrebbe funzionare con qualsiasi variabile)

version: ${version} 

la sostituzione è gre di lavoro e funziona come previsto.

Tuttavia, ho riscontrato un problema quando il numero di versione è cambiato e nessuna risorsa ha fatto che le risorse non vengano rielaborate e quindi il numero di versione non viene aggiornato in quei file.
Ho un po 'riparato questo dicendo il compito di eseguire ogni volta in questo modo:

processResources { 
    expand(version: version) 

    outputs.upToDateWhen { false } 
} 

Questo è il lavoro, ma mi sento come questo è un hack piuttosto sporca.

Quello che mi piacerebbe avere invece è una logica che dovrebbe eseguire nuovamente l'attività ogni volta che i file di risorse cambiano (come già fa) o quando il numero di versione (o qualsiasi variabile o variabile che mi interessa per quella materia) modificare.

Se qualcuno è interessato ecco il link al file vero e proprio: https://gitlab.crazyblock-network.net/BrainStone/MplManager/blob/master/build.gradle
e questo è il repo: https://gitlab.crazyblock-network.net/BrainStone/MplManager

risposta

2

Questo dovrebbe risolvere il problema:

def tokens = [ 
    'version': version 
] 

processResources { 
    inputs.properties(tokens) 
    expand(tokens) 
} 
+0

sembra funzionare nel caso in cui Ho solo una variabile. Ma quando ne ho diversi nella mappa ottengo un errore come questo: '' Impossibile trovare il metodo expand() per gli argomenti [{version = 2.9-1-gcb183f9-SNAPSHOT, MPLversion = 1.0.0}] '' – BrainStone

+0

Nevermind. Ho usato espandere nella posizione sbagliata! – BrainStone