2015-06-26 17 views
8

Ammetto che sono abbastanza nuovo da gradle ma non mi aspettavo di non riuscire a capire qualcosa di semplice come nell'esempio seguente. Posso leggere la documentazione di gradle sul controllo se una proprietà del progetto è stata impostata o meno usando una chiamata hasProperty (String propertyName) e sono seduto qui e non ho idea del motivo per cui qualcosa di così fondamentale non funzioni.Passare le proprietà a una build gradle

Credo che la mia mente deve essere molto "ant tipo" oriented che di sicuro mi manca qualcosa normale di base

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

e il ricorso a tale compito con il seguente comando:

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

Così le mie domande sarebbero:

  1. Perché il sistema è stampato ma restituisce Proprietà null?
  2. Come si verifica l'esistenza della proprietà del progetto denominata "sistema"?
  3. Esiste un modo diverso per testare una proprietà di progetto in contrasto con una proprietà di sistema?
  4. Come si passa una proprietà di sistema dalla riga di comando?

Questo è da, la documentazione Gradle e credo che sto leggendo bene

19.2.1. Verifica delle proprietà del progetto

È possibile accedere a una proprietà di progetto nello script di build semplicemente utilizzando il suo nome come si farebbe con una variabile. Se questa proprietà non esiste, verrà generata un'eccezione e la generazione fallirà. Se lo script di build si basa su proprietà opzionali che l'utente potrebbe impostare, magari in un file gradle.properties, è necessario verificare l'esistenza prima di accedervi. È possibile farlo utilizzando il metodo hasProperty ('propertyName') che restituisce true o false.

+0

Hai visto la mia risposta? Risolve il problema? Se è così, per favore accettalo. – Opal

+0

La tua risposta è arrivata il venerdì pomeriggio mentre mi stavo godendo un drink di fine settimana con i miei colleghi di lavoro :-) Ho testato la tua soluzione oggi e ha funzionato. Desideravo che la documentazione fosse più chiara dicendole semplicemente "progetto".hasProperty ('propertyName') 'al contrario di ciò che mostra ora. Inoltre, quando qualcosa deve restituire true o false e restituisce un valore null, aggiunge la confusione. Grazie mille. – Julian

risposta

11

È necessario invocare esplicitamente hasProperty nell'istanza project - senza di esso, hasProperty viene richiamato in alcuni contesti locali. Il seguente esempio funziona:

task printSystem() << { 
    println system 
    println "has property: " + project.hasProperty("system") 
} 
  1. Poiché inesistente strutture (system non è definita nello script) sono presi dall'istanza project. Se non si passa la proprietà system, verrà generata un'eccezione su println.
  2. project.hasProperty('propName')
  3. Non sono sicuro se ho capito bene, ma è possibile accedere alle proprietà del progetto tramite i project delle istanze e delle proprietà di sistema tramite la classe System.
  4. Utilizzando -D interruttore - gradle -Dprop=value
Problemi correlati