如何在build.gradle中使用gradle属性

47

当我运行这个任务时:

task tmpTask << {
    project.properties.each {println "   $it"}
}

我明白了:

org.gradle.java.home=/usr/lib/jvm/java-6-oracle

但是如何使用这个变量?我已经尝试了以下两种方式:

task tmpTask << {
    println org.gradle.java.home
    println project.properties.org.gradle.java.home
}

但这些都无法工作。第一次打印出现错误:

Could not find property 'org' on task ':tmpTask'.

第二个失败并出现以下错误:

Cannot get property 'gradle' on null object

你的方法给了我Could not find method leftShift() for arguments [build_3vobal41blt05kb5pvio1jbbm$_run_closure12@33fabf91] on task ':tmpTask' of type org.gradle.api.DefaultTask - Cadoiz
3个回答

58

project.properties 是一个 Map<String, ?>

因此您可以使用

project.properties['org.gradle.java.home']

您还可以使用property()方法(但是它会在其他位置查找):

project.property('org.gradle.java.home')

29

为了其他人的利益。如果您定义的属性不是点分隔符,则可以直接引用它。

在您的gradle.properties文件中:

myProperty=This is my direct property
my.property=This is my dotted property with\t\t tabs \n and newlines

在您的build.gradle文件中:
// this works
println myProperty
println project.property('my.property')

// this will not
println my.property

1
就像这样,这正是我想要的工作方式,但是对于我来说,使用一行VER_SPOTLESS=3.13.0的gradle.properties无法在任务中打印它。 无法获取类型为org.gradle.api.DefaultTask的任务':hello'的未知属性'VER_SPOTLESS'。 - dlamblin
3
这对我也不起作用。也许是因为我正在使用build.gradle.kts文件。 - Peter V. Mørch

11

来自gradle.properties

在文件gradle.properties中添加属性。

hi1=hi

从命令行

在命令行的末尾添加-Pxxx

./gradlew -q readPropertiesTask -Phi2=tete

几个属性:

./gradlew -q readPropertiesTask -Phi2=tete -Phi3=rr

如何阅读?

val propFromFile = project.properties["hi1"]
println("propFromFile = $propFromFile")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接