2014-11-20 3 views
7

ho qualcosa come questo nel mio livello superiore build.gradle (Gradle 2,2)Gradle non variabile globale in ambito entro buildscript

ext.repo = "https://my-artifactory-repo" 

buildscript { 
    repositories { 
     maven { 
      credentials { 
       username foo 
       password bar 
      } 
      url repo //doesn't work 
     } 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:0.14.1' 

    } 
} 

allprojects { 
    repositories { 
     maven { 
      credentials { 
       username foo 
       password bar 
      } 
      url repo //works 
     } 
    } 
} 

Questo è l'errore

Could not find property 'repo' on org.gradle.api.internal.[email protected]718afa64. 

quindi funziona in allprojects ma non buildscript.

risposta

4

Ciò accade perché la chiusura della configurazione buildscript {...} viene sempre valutata per prima, quindi la proprietà non è ancora definita. Una soluzione alternativa sarebbe definire la proprietà al di fuori dello script di build, inserendolo in un file gradle.properties o tramite la riga di comando.

+1

Suona come una svista – Bob

+0

Purtroppo questo è un problema del ciclo di vita. La chiusura 'buildscript' deve essere valutata prima di ogni altra cosa nel tuo script perché imposta il percorso di classe usato quando si esegue lo script. –

+0

Puoi anche spostare la definizione della proprietà nel buildscript, sarà quindi disponibile "globalmente". Ha funzionato per me, ma ho solo una configurazione di buildsript, non so come potrebbe funzionare con più configurazioni. – d370urn3ur

3

È possibile definire la variabile come extra property con ext nello buildscript {...}. Questa variabile è quindi accessibile anche nel campo di applicazione allprojects {...}:

buildscript { 
    ext { 
     repo = "https://my-artifactory-repo" 
    } 
    repositories { 
     maven { 
      url repo // works 
     } 
    } 
} 

allprojects { 
    repositories { 
     maven { 
      url repo // works 
     } 
    } 
}