專案屬性

專案屬性可在 專案 物件上使用。它們可以使用 -P / --project-prop 環境選項 從命令列設定。

以下範例示範如何以不同方式設定專案屬性。

範例 1:透過 命令列設定專案屬性

$ gradle -PgradlePropertiesProp=commandLineValue

當 Gradle 看見特別命名的系統屬性或環境變數時,它也可以設定專案屬性。如果環境變數名稱看起來像 ORG_GRADLE_PROJECT_prop=somevalue,則 Gradle 會在您的專案物件上設定一個 prop 屬性,其值為 somevalue。Gradle 也支援系統屬性,但命名模式不同,看起來像 org.gradle.project.prop。以下兩者都會在您的專案物件上將 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

請注意,如果專案屬性名稱中包含句點,則無法使用動態 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) 方法存取選擇性專案屬性前,檢查該屬性是否存在。