2015-06-26 112 views
8

我承認我對gradle很新,但我並不期望無法理解如下例所示的簡單內容。我可以閱讀關於使用hasProperty(String propertyName)調用來檢查項目屬性是否已設置的gradle文檔,我坐在這裏,不知道爲什麼這樣基本的東西不起作用。將屬性傳遞給gradle構建

我相信我的心態要這麼多的「蟻象」爲導向,對於確保我失蹤基本

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

一些普通和調用該任務與下面的命令:

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

所以我的問題將是:

  1. 爲什麼系統打印出來,但物業返回null
  2. 我應該如何檢查名爲「system」的項目屬性的存在性?
  3. 是否有不同的方式來測試項目屬性而不是系統屬性?
  4. 如何從命令行傳遞系統屬性?

這是從,在gradle這個文件,我相信我讀它的權利

19.2.1。檢查項目屬性

只需使用名稱就可以訪問構建腳本中的項目屬性,就像使用變量一樣。如果此屬性不存在,則會拋出異常並且構建將失敗。如果您的構建腳本依賴於用戶可能設置的可選屬性(可能位於gradle.properties文件中),則在訪問它們之前,您需要檢查是否存在。你可以通過使用hasProperty('propertyName')方法返回true或false。

+0

你有沒有看到我的答案?它解決了他的問題嗎?如果是這樣,請接受它。 – Opal

+0

您的答案在星期五下午抵達,當時我正在享受與我的辦公室同事一週喝完酒的時間:-)我今天測試了您的解決方案並且工作。我希望只要把項目放在一邊,文件就會更清楚。hasProperty('propertyName')',而不是它現在顯示的內容。此外,當某些東西應該返回true或false並返回null時會增加混淆。非常感謝你。 – Julian

回答

11

您需要明確調用project實例上的hasProperty - 如果沒有它,hasProperty會在某些本地上下文中調用。下面的示例的工作原理:

task printSystem() << { 
    println system 
    println "has property: " + project.hasProperty("system") 
} 
  1. 由於不存在性質(system未在腳本中定義)是project實例採取。如果您不通過system屬性,則會在println上拋出異常。
  2. project.hasProperty('propName')
  3. 不知道如果我的理解沒錯,但你可以通過System類通過project實例和系統屬性訪問項目屬性。
  4. 使用-D開關 - gradle -Dprop=value