2017-01-23 49 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

非常感谢您的详细解答! –