2015-06-26 13 views
8

Ich gebe zu, ich bin ziemlich neu zu groß, aber ich habe nicht erwartet, etwas so einfach wie das Beispiel unten zu verstehen. Ich kann die grddle Dokumentation über das Überprüfen lesen, ob eine Projekteigenschaft eingestellt worden ist oder nicht, die einen hasProperty (Schnur propertyName) Anruf verwenden und ich sitze hier und habe keine Idee, warum etwas so grundlegendes nicht funktioniert.Übergeben von Eigenschaften zu einer Gradel bauen

Ich glaube, mein Geist so viel sein muss „ant wie“ ausgerichtet, dass für sicher, ob ich etwas gewöhnlichen Grund mit dem Befehl

task printSystem() << { 
    println system 
    println "has property: " + hasProperty("system") 
} 

und Aufrufe diese Aufgabe unten bin fehle:

$gradle printSystem -Psystem=mySystem 
mySystem 
has property: null 

So meine Fragen wären:

  1. Warum System ausgedruckt wird, aber hasProperty gibtzurück?
  2. Wie sollte ich nach der Existenz der Projekteigenschaft "System" suchen?
  3. Gibt es eine andere Möglichkeit, eine Projekteigenschaft als eine Systemeigenschaft zu testen?
  4. Wie würden Sie eine Systemeigenschaft von der Befehlszeile übergeben?

Dies ist aus, die gradle Dokumentation und ich glaube, ich es richtig

19.2.1 lese. Überprüfen der Projekteigenschaften

Sie können auf eine Projekteigenschaft in Ihrem Buildskript zugreifen, indem Sie einfach ihren Namen verwenden, wie Sie eine Variable verwenden würden. Wenn diese Eigenschaft nicht vorhanden ist, wird eine Ausnahme ausgelöst und der Build schlägt fehl. Wenn Ihr Build-Skript auf optionalen Eigenschaften basiert, die der Benutzer möglicherweise festgelegt hat, müssen Sie möglicherweise in einer Datei "gradle.properties" prüfen, ob es existiert, bevor Sie darauf zugreifen. Sie können dies tun, indem Sie die Methode hasProperty ('propertyName') verwenden, die true oder false zurückgibt.

+0

Haben Sie meine Antwort gesehen? Löst es das Problem? Wenn ja, bitte akzeptiere es. – Opal

+0

Ihre Antwort kam an einem Freitagnachmittag, als ich mit meinen Bürokollegen am Ende der Woche einen Drink genoss :-) Ich habe heute Ihre Lösung getestet und es hat funktioniert. Ich wünschte, die Dokumentation würde klarer sein, sagen wir nur, indem wir "Projekt" setzen.hasProperty ('propertyName') 'im Gegensatz zu dem, was es jetzt zeigt. Auch wenn etwas Wahr oder Falsch zurückgeben soll und stattdessen eine Null zurückgibt, trägt das zur Verwirrung bei. Vielen Dank. – Julian

Antwort

11

Sie müssen hasProperty auf der project Instanz explizit aufrufen - ohne es wird hasProperty in einem lokalen Kontext aufgerufen. Das folgende Beispiel funktioniert:

task printSystem() << { 
    println system 
    println "has property: " + project.hasProperty("system") 
} 
  1. Da nicht vorhandenen Eigenschaften (system ist nicht im Skript definiert) sind vom project Beispiel genommen. Wenn Sie die system Eigenschaft nicht übergeben, wird eine Ausnahme auf println ausgelöst.
  2. project.hasProperty('propName')
  3. nicht sicher, ob ich richtig verstanden, aber Sie können Projekteigenschaften über die project Instanz und Systemeigenschaften über die System Klasse zugreifen.
  4. Mit -D Schalter - gradle -Dprop=value
Verwandte Themen