我有一个“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文件中设置属性的原因是它会传播到所有项目 –