Hier ist die Erklärung dafür, warum der Beispielcode in der Frage einen Fehler verursacht.
Im Code:
ext {
springVersion = "3.1.0.RELEASE"
emailNotification = "[email protected]"
}
nicht passieren auf die Funktion "ext" ein Objekt, das die springVersion und emailNotification Eigenschaften hat. Die geschweiften Klammern bedeuten kein POJO, sondern einen Verschluss. Aus diesem Grund beschwert sich die "ext" -Funktion, dass sie nicht zu den Eigenschaften gelangen kann.
Die Idee mit dem Führen eines solchen Verschlusses, als Konfigurationsverschluss bekannt ist, dass die Empfangsfunktion:
Ändern der Delegierten-Eigenschaft des Verschlusses auf ein Objekt hinweisen, dass die Verschlusseigenschaften/methods sollte handeln.
führen den Verschluss()
Damit der Verschluss führt, und wenn sie sich auf Verfahren/Eigenschaften bezieht, wird diese ausgeführt werden, auf das Objekt konfiguriert werden.
Somit ist die folgende Änderung an Ihrem Code wird es funktioniert:
class DataObject {
String springVersion;
String emailNotification;
}
def ext(closure) {
def data = new DataObject() // This is the object to configure.
closure.delegate = data;
// need this resolve strategy for properties or they just get
// created in the closure instead of being delegated to the object
// to be configured. For methods you don't need this as the default
// strategy is usually fine.
closure.resolveStrategy = Closure.DELEGATE_FIRST
closure() // execute the configuration closure
println data.springVersion
}
ext {
springVersion = "3.1.0.RELEASE"
emailNotification = "[email protected]"
}
Hoffnung, das hilft. Groovy Verschlüsse bekommen etwas gewöhnungsbedürftig ...
Wie werden Sie die Methode ext() aufrufen? Könnten Sie bitte die vollständige Gradle-Datei einfügen? –