在.gradle文件中设置gradle系统属性

在.gradle文件中设置gradle系统属性,gradle,Gradle,我有一个“general.gradle”文件,它为我的所有项目设置公共属性。 此文件提交到git存储库,并在多个用户之间共享。 我想向is添加一个系统属性,这样所有用户都可以使用它 像systemProp.http.nonProxyHosts这样的选项 有办法吗 您可以创建另一个文件,如general.properties,在其中添加系统属性,前缀为systemProp,然后在general.gradle中从该文件加载属性,如下所示: FileInputStream fileInputStrea

我有一个“general.gradle”文件,它为我的所有项目设置公共属性。 此文件提交到git存储库,并在多个用户之间共享。 我想向is添加一个系统属性,这样所有用户都可以使用它

像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))})
apply from: '{YOUR_PATH}/general.gradle'
然后将其加载到项目中的根
build.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))})
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
}

task testProp有什么理由不这样做;我不想使用gradle.properties文件,并在项目中提交一个?我们使用它的方式有点不同-我们有一个具有公共gradle属性的公共项目。保存在每个用户的主文件夹中的gradle.properties文件并不常见。我想在一些general.gradle文件中设置属性的原因是它将传播到所有项目请解释-我应该如何运行第一部分?properties.stringPropertyNames().forEach({key->ext.set(key,properties.getProperty(key))})做什么?好的。因此,您实际上不需要运行它;您只需在项目中放置一个general.properties文件;然后将此代码放入general.gradle中,一旦将general.gradle应用于build.gradle文件,就不需要手动执行任何操作;gradle将为您执行它,并使用forEach语句和
ext
值中的键值对,然后您可以在gradle任务中使用它。事实上,我认为我仍然应该修改这个答案的使用方法。让我来做吧。Np:)让我知道它是否有效;我试过了,似乎效果不错。对不起,最后修改了。仅设置
systemProp.
前缀值是不够的。您需要实际设置项目设置中某个任务中显式加载的系统值。我认为,如果您将其添加到任务中,您也可以使用类似的方法,但如果这对您来说还不够,请随意取消答案批准。实际上System.setProperty('some.prop',val)工作正常,因此这对我来说非常好