2015-06-26 78 views
8

我承认我对gradle很新,但我并不期望无法理解如下例所示的简单内容。我可以阅读关于使用hasProperty(String propertyName)调用来检查项目属性是否已设置的gradle文档,我坐在这里,不知道为什么这样基本的东西不起作用。将属性传递给gradle构建

我相信我的心态要这么多的“蚁象”为导向,对于确保我失踪基本

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

一些普通和调用该任务与下面的命令:

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

所以我的问题将是:

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

这是从,在gradle这个文件,我相信我读它的权利

19.2.1。检查项目属性

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

+0

你有没有看到我的答案?它解决了他的问题吗?如果是这样,请接受它。 – Opal

+0

您的答案在星期五下午抵达,当时我正在享受与我的办公室同事一周喝完酒的时间:-)我今天测试了您的解决方案并且工作。我希望只要把项目放在一边,文件就会更清楚。hasProperty('propertyName')',而不是它现在显示的内容。此外,当某些东西应该返回true或false并返回null时会增加混淆。非常感谢你。 – Julian

回答

11

您需要明确调用project实例上的hasProperty - 如果没有它,hasProperty会在某些本地上下文中调用。下面的示例的工作原理:

task printSystem() << { 
    println system 
    println "has property: " + project.hasProperty("system") 
} 
  1. 由于不存在性质(system未在脚本中定义)是project实例采取。如果您不通过system属性,则会在println上抛出异常。
  2. project.hasProperty('propName')
  3. 不知道如果我的理解没错,但你可以通过System类通过project实例和系统属性访问项目属性。
  4. 使用-D开关 - gradle -Dprop=value