2013-04-22 67 views
5

我想控制在搖籃「全球性」的配置建立使用每個構建機器上的外部屬性文件的腳本(DEV,CI,UAT,...),並指定使用命令行參數的文件名。搖籃/ Groovy的性能

例如gradle -DbuildProperties=/example/config/build.properties

我特別不想使用gradle.properties,因爲我們已有的項目已經使用這種方法,並且(例如)我們希望能夠修改數據庫url和jdbc驅動程序而無需更改每個項目。

到目前爲止已經試過: -

Properties props = new Properties() 
props.load(new FileInputStream("$filename")) 
project.setProperty('props', props) 

其作品,但有一個過時的警告,但我無法弄清楚如何避免這種情況。

在使用與ConfigSlurper時髦風格配置文件也試過: -

environments { 
    dev { 
     db.security { 
      driver=net.sourceforge.jtds.jdbc.Driver 
      url=jdbc:someserver://somehost:1234/some_db 
      username=userId 
      password=secret 
     } 
    } 
} 

但冒號和正斜槓導致異常的,我們不希望有惹配置與轉義字符。

必須有一個非過時的方式來做到這一點 - 任何人都可以提出「正確」的方式做到這一點?

謝謝

+0

你試過'URL = 「的jdbc:someserver://,某:1234/some_db」' – 2013-04-22 20:07:32

+0

是 - 沒有工作.... – user1016765 2013-04-22 21:49:58

回答

6

您可以很容易地擺脫棄用的警告。你得到的消息可能看起來像這樣:

按需創建屬性(a.k.a.動態屬性)已被棄用,並計劃在Gradle 2.0中刪除。有關更換動態屬性的信息,請閱讀http://gradle.org/docs/current/dsl/org.gradle.api.plugins.ExtraPropertiesExtension.html。 棄用動態屬性:「真」:關於「根項目‘私人’」值「道具」。

它可以通過更換固定:

project.setProperty('props', props) 

project.ext.props = props 
5

只是爲了補充由@Steinar給出的迴應:

它仍然可以使用未來的語法:

project.ext.set('prop_name', prop_value) 

的情況下,你必須從文件的幾個屬性:

props.each({ project.ext.set(it.key, it.value)}) 
+1

稍微更慣用:'props.each {project.ext [it.key] = it.value}' – 2013-08-12 16:32:00