2016-12-15 1 views
2

Gibt es eine Möglichkeit innerhalb externen Eigenschaften in benutzerdefinierten initscript Block wiederzuverwenden init.gradle?Gradle Init-Skript Blockeigenschaften

def REPO_URL = 'myRepoUrl' 

initscript { 
    repositories { 
     maven { 
      url REPO_URL 
     } 
    } 
    dependencies { 
     classpath 'some dependency' 
    } 
} 

Das gibt mir unbekannte Eigenschaft Fehler. Ich habe auch versucht, ext {} wie so

mit dem gleichen Fehler zu verwenden. Aber es funktioniert in allen anderen Konfigurationsblöcken, die ich bisher sogar innerhalb init.gradle probiert habe. Dies zwingt mich, Eigenschaften für initscript Block und Rest der Konfiguration zu duplizieren.

Nach ein bisschen mehr Untersuchung sieht es so aus, als ob es einen Bezug zum umgebenden Umfang völlig verliert. Ich verstehe nicht einmal, warum es sich vom Groovy-Standpunkt aus so verhält.

Antwort

1

Ich denke, das Problem ist ein Huhn-und-Ei-Ding.

Um das Init-Skript auszuführen, benötigen Sie die Abhängigkeiten, die Sie im Block initscript deklariert haben. Sie versuchen jedoch, etwas zu verwenden, das nur während der Ausführung des Init-Skripts vorhanden ist.

Also ich würde sagen, was Sie wollen, ist nicht möglich. Sie müssen es mindestens zweimal innerhalb des initscript Blocks und außerhalb deklarieren. Das Beste, was Sie wahrscheinlich bekommen können, ist:

+0

Also bedeutet dies, dass Gradle irgendwie kompiliert und initscript-Methode ausführt, ohne den umgebenden Bereich auszuführen? Ich bin relativ neu bei Gradle und Groovy und wusste nicht, dass das möglich ist. –

+0

Sie können in den Groovy-Kompilierungsprozess einsteigen und Groovy-Skripte transformieren, bevor sie tatsächlich mit dem Standard-Compiler kompiliert werden. Eine dieser Transformationen sollte in diesem Fall sein, dass der 'initscript'-Block extrahiert und vor dem Rest des Skripts ausgewertet wird, da der Rest des Skripts die Abhängigkeiten benötigt, die Sie in diesem Block in seinem Klassenpfad zur Ausführung deklarieren, andernfalls würden Sie erhalten Kompilieren Sie Fehler, da sich die Abhängigkeiten nicht im Klassenpfad befinden. Hühnerei, wie ich schon sagte. :-) – Vampire

+0

Große Antwort, um in einen Kommentar zu verlinken, um zu verhindern, dass Kollegen fragen, warum ich dieses Stück Code dupliziert habe. –

1

In Ihrem GRADLE_HOME oder PROJECT_HOME können Sie 2 Dateien haben.

gradle.properties Objekte

init.gradle für Init-Skript

In gradle.properties Sie Ihre params

REPO_URL=myRepoUrl 

Dann in init.gradle Sie können hinzufügen Verwenden Sie es:

repositories { 
     maven { 
      url REPO_URL 
     } 
    } 
+0

Können die gradle.properties in $ USER_HOME/.gradle gehen? –

+1

Ja, Gradle.properties könnte auf project_home oder user_home platziert werden – marok

Verwandte Themen