2014-11-20 10 views
7

Mam coś takiego w moim najwyższym poziomie build.gradle (Gradle 2.2)Gradle globalny nie zmienna w zakresie w 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 
     } 
    } 
} 

Jest to błąd

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

Tak to działa w allprojects ale nie buildscript.

Odpowiedz

4

Dzieje się tak, ponieważ zamknięcie konfiguracji buildscript {...} jest zawsze oceniane najpierw, więc właściwość nie jest jeszcze zdefiniowana. Obejściem byłoby zdefiniowanie właściwości poza skryptem budowania, poprzez umieszczenie go w pliku gradle.properties lub za pomocą wiersza polecenia.

+1

Brzmi jak nadzór – Bob

+0

Niestety jest to problem cyklu. Zamknięcie 'buildscript' musi zostać ocenione przed wszystkim innym w twoim skrypcie, ponieważ ustawia ścieżkę klas używaną podczas wykonywania twojego skryptu. –

+0

Możesz także przenieść definicję właściwości do buildscriptu, wtedy będzie dostępna "globalnie". Pracowałem dla mnie, ale mam tylko jedną konfigurację buildsript, nie wiem jak to by działało z wieloma konfiguracjami. – d370urn3ur

3

Możesz zdefiniować zmienną jako extra property z ext w buildscript {...}. Zmienna ta jest następnie dostępna również w zakresie allprojects {...}:

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

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