2017-01-23 50 views
0

我有一個「general.gradle」文件,它爲我的所有項目設置了公共屬性。 這個文件是致力於git倉庫,並在許多用戶之間共享。 我想補充的系統屬性的所以這將是通用於所有用戶在.gradle文件中設置gradle系統屬性

這樣的選項,如systemProp.http.nonProxyHosts

有沒有辦法?

+0

是否有任何理由爲什麼你不想使用該gradle.properties文件,並有一個在項目中提交? – OlgaMaciaszek

+0

我們使用它的方式有點不同 - 我們有一個共同的項目,具有共同的gradle屬性。保存在每個用戶的主文件夾中的gradle.properties文件並不常見。 我想在某些general.gradle文件中設置屬性的原因是它會傳播到所有項目 –

回答

1

你可以做另一個文件,如general.properties,增加你的系統性能通過systemProp有前綴,然後在general.gradle負載從該文件的屬性,就像這樣:

FileInputStream fileInputStream = new FileInputStream(new File('{YOUR_PATH}/general.properties')) 
Properties properties = new Properties() 
properties.load(fileInputStream) 
fileInputStream.close() 

properties.stringPropertyNames().forEach({key -> ext.set(key, properties.getProperty(key))}) 

,然後將其加載到您的根build.gradle文件的項目,像這樣:

apply from: '{YOUR_PATH}/general.gradle' 

您可以從ext屬性檢索。在此示例之後,如果您將general.properties放在您的項目中並在其中添加,例如:spring=dev。然後你把財產加載代碼general.gradle和您的build.gradle應用它,如果你在你的build.gradle添加像這樣一個任務:

task testProp << { 
String profile = getProperty('spring') 
System.setProperty('Spring.profiles.active', profile) 
String prop = System.getProperty('Spring.profiles.active'); 
println prop 
} 

然後執行任務應該打印出來dev

+0

請你解釋一下 - 我該如何運行第一部分? 和 properties.stringPropertyNames()。forEach({key - > ext.set(key,properties.getProperty(key))})的作用是什麼? –

+1

好的。所以你不需要運行它;你只需要在項目中放置一個general.properties文件;那麼你把這個代碼放在general.gradle中,一旦你將general.gradle應用到你的build.gradle文件中,你不需要手動執行任何操作; gradle會爲你執行它並使用forEach語句,'ext'值中的鍵值對,然後你可以在你的gradle任務中使用它。其實,我認爲我仍然應該用它可以使用的方式來修改這個答案。讓我這樣做。 – OlgaMaciaszek

+0

非常感謝您的詳細解答! –