指定Gradle构建属性
屬性是用于輕松自定義Gradle構建和Gradle環境的寶貴工具。 我將在本文中演示一些用于指定Gradle構建中使用的屬性的方法。
Gradle支持項目屬性和系統屬性 。 這篇文章中有趣的是兩者之間的主要區別是如何訪問它們。 通過常規Java / Groovy系統屬性訪問方法訪問系統屬性時,項目屬性更有助于按名稱直接訪問。
使用-P從命令行傳遞項目屬性
將屬性傳遞到Gradle構建的最簡單方法之一是在命令行中使用-P指定項目屬性。 使用-P傳遞給構建的屬性可以在構建中作為項目屬性輕松訪問,并且如果其命名結構允許,則可以像變量一樣直接訪問。
使用-D從命令行傳遞系統屬性
與其他Java應用程序一樣,可以使用-D將系統屬性傳遞給Gradle構建。 盡管通過-D選項提供給Gradle構建的這些系統屬性始終可以通過用于獲取系統屬性的常規Java機制提供給Gradle構建,但是Gradle可以將Project Properties指定為系統屬性。 這是通過放置前綴org.gradle.project.來完成的org.gradle.project. 在生成所需屬性名稱之前。 例如,如果要使用-D指定一個名為name.first的系統屬性,該屬性可以供Gradle構建使用,就像它由-P提供一樣,則該人可以在命令行上將其作為org.gradle.project. name.first提供給Gradle構建org.gradle.project. name.first org.gradle.project. name.first和Gradle構建會將其視為名為name.first的項目屬性。
通過環境變量傳遞系統屬性
任何Java或Groovy應用程序(包括Gradle構建)都可以通過System.getenv(String)訪問環境變量。 但是,如果環境變量以ORG_GRADLE_PROJECT_為前綴,則Gradle允許像其他項目屬性一樣在構建中訪問環境變量。 例如,如果某人想要在Gradle構建name.last項目屬性命名為name.last并想通過環境變量將其提供給構建,則該人可以聲明環境變量ORG_GRADLE_PROJECT_name.last并且其值可用于Gradle作為名稱為name.last的項目屬性進行name.last 。
gradle.properties
也可以通過名為gradle.properties的屬性文件將屬性提供給Gradle構建。 用systemProp.指定的任何屬性systemProp. 其屬性名稱的開頭被視為Gradle構建中的系統屬性,而其他屬性(其名稱以“ systemProp。開頭”)則被視為Gradle項目屬性。 例如,如果我的gradle.properties文件具有屬性name.last=Marx和屬性name.last=Marx systemPropr.name.first=Dustin , name.last在Gradle構建中看到并訪問name.last屬性,就像該name.first任何項目屬性一樣name.first像任何系統屬性一樣, name.first屬性將在Gradle構建中被看到和訪問。
示范/范例
每種類型的屬性指定機制都可以通過一個簡單的示例進行演示。 接下來顯示的Gradle構建會嘗試打印以不同方式指定的各種屬性。
build-properties.gradle
task displayProperties << {displaySystemProperties()displayGradleProjectProperties() }def displaySystemProperties() {println "\n=== System Properties ==="println "Favorite Movie (1994): ${System.properties['movie.favorite.1994']}"println "Favorite Movie (1996): ${System.properties['movie.favorite.1996']}" println "Favorite Movie (1997): ${System.properties['movie.favorite.1997']}"println "Favorite Movie (1981): ${System.properties['movie.favorite.1981']}"println "Favorite Movie (2012): ${System.properties['movie.favorite.2012']}"println "Favorite Movie (2013): ${System.properties['movie.favorite.2013']}" }def displayGradleProjectProperties() {println "\n=== Gradle Project Properties ==="println "Favorite Movie (1994): ${getProjectProperty('movie.favorite.1994')}"println "Favorite Movie (1996): ${getProjectProperty('movie.favorite.1996')}"println "Favorite Movie (1997): ${getProjectProperty('movie.favorite.1997')}"println "Favorite Movie (1981): ${getProjectProperty('movie.favorite.1981')}"println "Favorite Movie (2012): ${getProjectProperty('movie.favorite.2012')}"println "Favorite Movie (2013): ${getProjectProperty('movie.favorite.2013')}" }def String getProjectProperty(String propertyName) {String movieTitle = "null"if (hasProperty(propertyName)){movieTitle = this.properties[propertyName]}return movieTitle }傳遞給此腳本的某些屬性將在命令行中用-P ,一些屬性在命令行中用-D ,一個將通過環境變量提供,而兩個將通過gradle.properties提供gradle.properties文件與構建文件位于同一目錄中。 接下來顯示該gradle.properties文件。
gradle.properties
movie.favorite.2013=Star Trek into Darkness systemProp.movie.favorite.2012=Skyfall放置好gradle.properties文件后,該示例的其他兩個有趣的部分是環境變量的設置。 此處的示例是在DOS中進行的,但是在Linux環境中,可以使用稍有不同的語法來完成同一件事。 DOS / Windows命令是: set ORG_GRADLE_PROJECT.movie.favorite.1981="Raiders of the Lost Ark"
對于此演示,我將使用-D和-P參數運行Gradle構建腳本: gradle -b build-properties.gradle displayProperties -Pmovie.favorite.1996="Independence Day" -Dmovie.favorite.1997=Gattaca -Dorg.gradle.project.movie.favorite.1994="Shawshank Redemption"
當在上面列出的Gradle構建腳本中運行并帶有指定的gradle.properties文件,指定了指定的環境變量,并且僅顯示了命令時,輸出看起來像在下一個屏幕快照中所示。
屏幕快照指示了如何根據其來源和命名約定在Gradle構建中查看/訪問屬性。 簡而言之,輸出顯示了在Gradle構建中屬性可用性的以下“規則”:
- 命令行-P屬性是“項目屬性”
- 命令行-D屬性是“系統屬性”,但有一個例外
- 以org.gradle.project.開頭的命令行-D屬性org.gradle.project. 是“項目屬性”
- 除了一個例外,在gradle.properties中指定的gradle.properties是“項目屬性”
- 在gradle.properties中指定的以gradle.properties開頭的屬性systemProp. 是“系統屬性”
- 除了一個例外,通過環境變量指定的屬性是“系統屬性”
- 通過以ORG_GRADLE_PROJECT_開頭的環境變量指定的屬性是“項目屬性”
結論
Gradle提供了多種方法來指定可用于自定義Gradle構建的屬性。
翻譯自: https://www.javacodegeeks.com/2014/01/specifying-gradle-build-properties.html
總結
以上是生活随笔為你收集整理的指定Gradle构建属性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sun.misc.Unsafe和堆外内存
- 下一篇: GC对吞吐量和延迟的影响