【问题标题】:Passing properties to a gradle build将属性传递给 gradle 构建
【发布时间】:2015-06-26 04:54:17
【问题描述】:

我承认我对 gradle 很陌生,但我没想到无法理解像下面的示例这样简单的东西。我可以阅读有关使用 hasProperty(String propertyName) 调用检查项目属性是否已设置的 gradle 文档,而我坐在这里,不知道为什么这么基本的东西不起作用。

我相信我的思维一定是非常“像蚂蚁”的,以至于我肯定错过了一些普通的基本内容

task printSystem() << {
    println system
    println "has property: " + hasProperty("system")
}

并使用以下命令调用该任务:

$gradle printSystem -Psystem=mySystem
mySystem
has property: null

所以我的问题是:

  1. 为什么系统打印出来但hasProperty返回null
  2. 我应该如何检查名为“system”的项目属性是否存在?
  3. 项目属性与系统属性的测试方法是否不同?
  4. 如何从命令行传递系统属性?

这是来自 gradle 文档,我相信我没看错

19.2.1。检查项目属性

您可以像使用变量一样使用其名称来访问构建脚本中的项目属性。如果该属性不存在,则会抛出异常并且构建将失败。如果您的构建脚本依赖于用户可能设置的可选属性,可能在 gradle.properties 文件中,您需要在访问它们之前检查它们是否存在。您可以使用返回 true 或 false 的方法 hasProperty('propertyName') 来做到这一点。

【问题讨论】:

  • 你看到我的回答了吗?能解决他的问题吗?如果是,请接受。
  • 您的答案是在星期五下午与我的办公室同事一起享受周末饮料的时候到达的 :-) 我今天测试了您的解决方案并且它有效。我希望通过输入project.hasProperty('propertyName') 而不是现在显示的内容,文档会更清楚地说。此外,当某些东西应该返回 true 或 false 并返回 null 时,反而会增加混乱。非常感谢。

标签: gradle


【解决方案1】:

您需要在project 实例上显式调用hasProperty - 没有它,hasProperty 将在某些本地上下文中调用。以下示例有效:

task printSystem() << {
    println system
    println "has property: " + project.hasProperty("system")
}
  1. 因为 不存在 属性(system 未在脚本中定义)是从project 实例获取。如果您不传递system 属性,则会在println 上引发异常。
  2. project.hasProperty('propName')
  3. 不确定我是否理解正确,但您可以通过 project 实例访问项目属性,并通过 System 类访问系统属性。
  4. 使用-D 开关-gradle -Dprop=value

【讨论】:

  • 我可以为此提出自己的问题,但我如何检查系统属性? System.hasProperty 也总是返回 null。 (我在 gradle.properties 文件中定义了一个 systemProp.example)
  • @slifty, hasProperty 是在 project 上定义的,而不是 System
  • 我已经单独提出了我的问题,而不是劫持这个评论线程:stackoverflow.com/questions/50108534/…
猜你喜欢
  • 1970-01-01
  • 2019-10-03
  • 1970-01-01
  • 2016-05-16
  • 1970-01-01
  • 1970-01-01
  • 2017-09-14
  • 2013-03-24
  • 1970-01-01
相关资源
最近更新 更多