内容
项目属性
以下示例演示了如何以不同的方式设置项目属性。
示例 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) 方法访问可选项目属性之前,应检查其是否存在。 |