2017-04-21 1 views
0

Ich sehe:Gradle Erklären DSL Magie für maven.url

repositories { 
    maven.url 'http://example.com/artifactory/libs-release' 
    maven.url 'http://example.com/artifactory/libs-snapshot' 
} 

und

repositories { 
    maven { url 'http://example.com/artifactory/libs-release' } 
    maven { url 'http://example.com/artifactory/libs-snapshot' } 
} 

beide arbeiten.

According to documentationMavenArtifactRepository haben Eigenschaft url.

Was folgt - ein Methodenaufruf auf url Wert oder Anruf von Immobilien-Setzer:

maven.url 'http://example.com/artifactory/libs-release' 

Was folgt ist (ich es ruft MavenArtifactRepository Konstruktor erraten):

maven { url 'http://example.com/artifactory/libs-release' } 
+0

Mögliches Duplikat von [Verwirrt mit der Verwendung von Zuweisung "=" und Klammern {}] (http://stackoverflow.com/questions/22759542/confused-with-the-use-of-assignment-and-brackets) –

Antwort

3

Zuerst lässt analysieren die url Eigenschaft Zugriff (in beiden Beispielen):

Ist es ein Methodenaufruf oder ein Aufruf des Property Setter ? Nun, es ist irgendwie beides. Lassen Sie uns zitieren Mr. Hakis blog:

Gradle eine Proxy-Klasse für die tatsächliche Klassenimplementierung schaffen und fügt hinzu (unter anderem) eine Eigenschaft Setter-Methode. Die Methode hat den Namen der Eigenschaft und hat ein einzelnes Argument desselben Typs wie die Eigenschaft. Es unterscheidet sich von den Methoden setProperty und getProperty, die bereits von Groovy hinzugefügt wurden.

Dies ist reiner syntaktischer Zucker, der das Gradle-Gefühl der Kombination von Konfiguration und Skripting unterstützt. Wenn Sie denken, dass es irreführend ist, verwenden Sie einfach den Zuweisungsoperator (der dank Setzt auch den Setter verwendet).

Nun, was ist mit dem maven Teil?

Es sieht aus wie eine Eigenschaft von repositories. Aber wenn wir uns die Definition seines Typs RepositoryHandler ansehen, stellen wir fest, dass es sich um eine Methode handelt, die ein neues MavenArtifactRepository erstellt, das entweder eine Schließung oder eine Aktion (für Java-Verwendung) zur Konfiguration akzeptiert.

Dies erklärt einfach das zweite Beispiel, als wir eine Schließung übergeben, die dann die url-Eigenschaft konfiguriert. Groovy ermöglicht das Überspringen der Klammern.

Das erste Beispiel ist komplizierter. Wir verwenden immer noch dieselbe Methode, aber dieses Mal geben wir einen leeren Konfigurationsabschluss als Parameter an. Die Methode gibt immer noch eine neue MavenArtifactRepository zurück und wir greifen auf ihre url Eigenschaft zu.

+0

Ich brauche 10 Kapseln Kaffee und einen Abend, um diese Syntax Magie zu verstehen. Kannst du empfehlen, neben offiziellen Dokumenten zum Thema zu lesen? Etwas in http://www.mrhaki.com/books.html? – gavenkoa

+1

Eigentlich habe ich kein Buch gelesen, nur die Gradle/Groovy Dokumentation und mehrere Seiten von Google (die oft zu Mr. Hakis Blog führen). –

Verwandte Themen