我有一個「general.gradle」文件,它爲我的所有項目設置了公共屬性。 這個文件是致力於git倉庫,並在許多用戶之間共享。 我想補充的系統屬性的所以這將是通用於所有用戶在.gradle文件中設置gradle系統屬性
這樣的選項,如systemProp.http.nonProxyHosts
有沒有辦法?
我有一個「general.gradle」文件,它爲我的所有項目設置了公共屬性。 這個文件是致力於git倉庫,並在許多用戶之間共享。 我想補充的系統屬性的所以這將是通用於所有用戶在.gradle文件中設置gradle系統屬性
這樣的選項,如systemProp.http.nonProxyHosts
有沒有辦法?
你可以做另一個文件,如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
。
請你解釋一下 - 我該如何運行第一部分? 和 properties.stringPropertyNames()。forEach({key - > ext.set(key,properties.getProperty(key))})的作用是什麼? –
好的。所以你不需要運行它;你只需要在項目中放置一個general.properties文件;那麼你把這個代碼放在general.gradle中,一旦你將general.gradle應用到你的build.gradle文件中,你不需要手動執行任何操作; gradle會爲你執行它並使用forEach語句,'ext'值中的鍵值對,然後你可以在你的gradle任務中使用它。其實,我認爲我仍然應該用它可以使用的方式來修改這個答案。讓我這樣做。 – OlgaMaciaszek
非常感謝您的詳細解答! –
是否有任何理由爲什麼你不想使用該gradle.properties文件,並有一個在項目中提交? – OlgaMaciaszek
我們使用它的方式有點不同 - 我們有一個共同的項目,具有共同的gradle屬性。保存在每個用戶的主文件夾中的gradle.properties文件並不常見。 我想在某些general.gradle文件中設置屬性的原因是它會傳播到所有項目 –