项目属性

项目属性在 Project 对象上可用。它们可以通过命令行使用 -P / --project-prop 环境选项 设置。

以下示例演示了如何以不同的方式设置项目属性。

示例 1: 通过命令行设置项目属性

$ gradle -PgradlePropertiesProp=commandLineValue

Gradle 也可以在看到特定命名的系统属性或环境变量时设置项目属性。如果环境变量名称类似于 ORG_GRADLE_PROJECT_prop=somevalue,那么 Gradle 将在您的项目对象上设置一个 prop 属性,其值为 somevalue。Gradle 也支持系统属性,但使用不同的命名模式,看起来像 org.gradle.project.prop。以下两者都将在您的 Project 对象上将 foo 属性设置为 "bar"

示例 2: 通过系统属性设置项目属性

org.gradle.project.foo=bar

示例 3: 通过环境变量设置项目属性

ORG_GRADLE_PROJECT_foo=bar

当您没有持续集成服务器的管理员权限,并且需要设置不应该轻易可见的属性值时,此功能非常有用。由于您在这种情况下无法使用 -P 选项,也无法更改系统级配置文件,因此正确的策略是更改持续集成构建作业的配置,添加一个与预期模式匹配的环境变量设置。这对于系统上的普通用户将不可见。

以下示例演示了如何使用项目属性。

示例 1: 在配置时读取项目属性

build.gradle.kts
// Querying the presence of a project property
if (hasProperty("myProjectProp")) {
    // Accessing the value, throws if not present
    println(property("myProjectProp"))
}

// Accessing the value of a project property, null if absent
println(findProperty("myProjectProp"))

// Accessing the Map<String, Any?> of project properties
println(properties["myProjectProp"])

// Using Kotlin delegated properties on `project`
val myProjectProp: String by project
println(myProjectProp)
build.gradle
// Querying the presence of a project property
if (hasProperty('myProjectProp')) {
    // Accessing the value, throws if not present
    println property('myProjectProp')
}

// Accessing the value of a project property, null if absent
println findProperty('myProjectProp')

// Accessing the Map<String, ?> of project properties
println properties['myProjectProp']

// Using Groovy dynamic names, throws if not present
println myProjectProp

Kotlin 委托属性 是 Gradle Kotlin DSL 的一部分。您需要显式指定类型为 String。如果您需要根据属性的存在进行分支,您也可以使用 String? 并检查 null

请注意,如果 Project 属性的名称中包含点,则无法使用动态 Groovy 名称。您必须使用 API 或动态数组表示法。

示例 2: 读取项目属性以在执行时使用

build.gradle.kts
tasks.register<PrintValue>("printValue") {
    // Eagerly accessing the value of a project property, set as a task input
    inputValue = project.property("myProjectProp").toString()
}
build.gradle
tasks.register('printValue', PrintValue) {
    // Eagerly accessing the value of a project property, set as a task input
    inputValue = project.property('myProjectProp')
}
如果引用了项目属性但不存在,则会抛出异常,构建将失败。在使用 Project.hasProperty(java.lang.String) 方法访问可选项目属性之前,应检查其是否存在。