在 gradle.properties 文件中声明数组/哈希图

Posted

技术标签:

【中文标题】在 gradle.properties 文件中声明数组/哈希图【英文标题】:Declare array/hashmap in gradle.properties file 【发布时间】:2014-12-19 17:38:22 【问题描述】:

我正在尝试在 gradle.properties 文件中定义一个数组。例如,当我在某个 gradle 脚本中执行下一个操作时:

project.ext.mygroup = [
  myelement1: "myvalue1",
  myelement2: "myvalue2"
]
project.mygroup.put("myelement3", "myvalue3"); // As internally it works like a hashmap

然后我列出属性,我得到:

mygroup: myelement1=myvalue1, myelement2=myvalue2, myelement3=myvalue3

所以,如果我尝试在 gradle.properties 文件中设置具有相同形式的属性:

mytestgroup=myelement1=myvalue1, myelement2=myvalue2

然后在 gradle 脚本中我尝试访问这个属性:

project.mytestgroup.put("myelement3", "myvalue3");

我得到下一个错误:

No signature of method: java.lang.String.put() is applicable for argument types: (java.lang.String, java.lang.String) values: [myelement3, myvalue3]

这是因为属性“mytestgroup”被视为字符串而不是数组。

有谁知道在 gradle.properties 文件中声明数组的正确语法是什么?

提前致谢

【问题讨论】:

您不能在gradle.properties 中设置列​​表或映射值,因为这是一个纯Java 属性文件,其中所有值都是字符串。 【参考方案1】:

JsonSlurper 方法很好,但我想要一种更简洁的方法来将简单字符串或数组定义为属性。我通过将属性声明为:

mygroup=myvalue1

或:

mygroup=myvalue1,myvalue2,myvalue3

然后在 Gradle 中检索属性:

Properties props = new Properties()
props.load(new FileInputStream(file('myproject.properties')))
props.getProperty('mygroup').split(",")

你会得到一个字符串数组。请注意逗号周围的空格字符。

【讨论】:

【参考方案2】:

将属性设置为 JSON 字符串

myHash = "first": "Franklin", "last": "Yu"
myArray = [2, 3, 5]

并在构建脚本中使用JsonSlurper解析它:

def slurper = new groovy.json.JsonSlurper()
slurper.parseText(hash) // => a hashmap
slurper.parseText(array) // => an array

【讨论】:

【参考方案3】:

符号myelement1=myvalue1, myelement2=myvalue2, myelement3=myvalue3 只是作为调用Map.toString() 的结果的对象的字符串表示。它在语法上不是正确的 Groovy。

您的第一个示例是定义Map 的正确方法。

def myMap = [ key : 'value' ]

定义数组也是类似的。

def myArray = [ 'val1', 'val2', 'val3' ]

【讨论】:

谢谢马克!我知道这是在 groovy 中定义数组/哈希图的正确方法,但我问的是 gradle.properties 文件,该文件(根据彼得的回答)不是 groovy 而是 java 属性文件。 抱歉,我想我没有完全阅读您的问题。彼得是对的,属性文件中的值只能是字符串。

以上是关于在 gradle.properties 文件中声明数组/哈希图的主要内容,如果未能解决你的问题,请参考以下文章

如何在 git-ignore 文件 android 中添加 gradle.properties? [复制]

Cordova 在 gradle-wrapper.properties 文件中构建更改 distributionUrl

配置gradle.properties

Android Gradle 插件Gradle 基础配置 ③ ( 生成 Gradle Wrapper 配置 | 分析生成的 gradle-wrapper.properties 配置文件 )

在 gradle.properties 文件中使用“android.debug.obsoleteApi=true”时如何访问日志错误详细信息

我应该把 gradle.properties 放在詹金斯的哪里