将属性传递给gradle构建

Jul*_*ian 14 gradle

我承认我很贪心,但我没想到会像下面的例子那样简单地理解.我可以使用hasProperty(String propertyName)调用来阅读关于检查是否已设置项目属性的gradle文档,我坐在这里并且不知道为什么这么基本的东西不起作用.

我相信我的思想必须如此"蚂蚁般",因为我确实缺少一些普通的基本知识

task printSystem() << {
    println system
    println "has property: " + hasProperty("system")
}
Run Code Online (Sandbox Code Playgroud)

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

$gradle printSystem -Psystem=mySystem
mySystem
has property: null
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:

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

这是来自gradle文档,我相信我正在阅读它

19.2.1.检查项目属性

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

Opa*_*pal 16

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

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