项目属性

项目属性在项目对象上可用。可以使用-P/ --project-prop environment 选项从命令行设置它们。

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

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

$ gradle -PgradlePropertiesProp=commandLineValue

当 Gradle 看到专门命名的系统属性或环境变量时,它还可以设置项目属性。如果环境变量名称看起来像,那么 Gradle 将在您的项目对象上设置一个属性,其值为。 Gradle 也支持系统属性,但具有不同的命名模式,看起来像.以下两项都将设置.ORG_GRADLE_PROJECT_prop=somevaluepropsomevalueorg.gradle.project.propfoo' property on your Project object to `"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)方法 访问可选项目属性之前,您应该检查它们是否存在。