gradle編譯工具贪嫂,參數(shù)傳遞

gradle編譯工具,參數(shù)傳遞

gradle props

Gradle supports both project properties and system properties/enviroment properties).

The main difference between the two that is of interest in this post is how each is accessed.

Project properties are more conducive to direct access by name while system properties are accessed via normal Java/Groovy system properties
access methods.

Passing Project Properties from Command-Line with -P

One of the easiest approaches for passing properties to a Gradle build is to specify project properties with -Pfrom the command line.
Properties passed into the build with -P are readily accessible in the build as project properties and, if their naming structure allows, can be accessed directly like variables.

Passing System Properties from Command-Line with -D

As is the case with other Java applications, one can pass system properties to Gradle builds with -D.

Although these system properties provided to the Gradle build via the -D option are always available to the Gradle build via the normal Java mechanism for obtaining system properties,System.getProperty("xxxx")

Gradle makes it possible to specify Project Properties as system properties. This is done by placing the prefix org.gradle.project. before the name of the property desired in the build.

For example, if one wanted to specify a system property namedname.first with -D that would be available to the Gradle build as if it was provided with -P,
the person could provide it to the Gradle build on the command line as org.gradle.project.name.first
and the Gradle build would see it as a project property named name.first.

Passing System Properties via Environmental Variable

Any Java or Groovy application (including a Gradle build) can access environmental variables via System.getenv(String).

However, Gradle allows environment variables to be accessed within the build like other project properties if the environmental variable is prefixed with ORG_GRADLE_PROJECT_.

For example, if one wanted a project property in the Gradle build to be called name.last and wanted to supply it to the build via environment variable, that person could declare the environment variableORG_GRADLE_PROJECT_name.last and its value would be available to the Gradle build as a project property with name name.last.

gradle.properties

Properties can also be provided to a Gradle build via a properties file named gradle.properties. Any properties specified with systemProp. at the beginning of their property name are seen as system properties in the Gradle build and other properties (without their names beginning with "systemProp.") are seen as Gradle project properties. For example, if my gradle.properties file had a property name.last=Marx and a propertysystemPropr.name.first=Dustin, the name.last property would be seen and accessed in the Gradle build like any project property while the name.first property would be seen and accessed in the Gradle build like any system property.

The screen snapshot indicates how properties are seen/accessed in the Gradle build depending on their source and naming convention. In short, the output demonstrates the following "rules" of property availability in a Gradle build:

demo buid.gralde

apply plugin: 'groovy'

repositories {
    mavenCentral()
}

dependencies {
    compile 'org.codehaus.groovy:groovy-all:2.3.11'
    testCompile group: 'junit', name: 'junit', version: '4.12'
}


task mkdir {
    doLast {
        mkdir("src/main/groovy")
        mkdir("src/main/resources")
        mkdir("src/test/groovy")
        mkdir("src/test/resources")
    }
}


task displayProperties {
    doLast {
        printSystemProps()
        printProjectProps()
    }
}

def printSystemProps() {
    println "\n=== System Properties ==="
//    println "systemProp_environmental_variable: ${System.properties['systemPropA']}"   //need to change to below line,env variable
    //in linux:             export systemProp_environmentalVariable='systemProp from environmentalVariable'
    println "systemProp_environmentalVariable: ${System.getenv('systemProp_environmentalVariable')}"
    //in gradle.properties file , make sure the prop starts with systemProp.,that is
    //systemProp.systemProp_propertyFile=systemProp from propertyFile
    println "systemProp_propertyFile: ${System.properties['systemProp_propertyFile']}"

    //gradle :gradlePropertiesStudy:displayProperties -DsystemProp_dashD='systemProp from -D'
    println "systemProp_dashD: ${System.properties['systemProp_dashD']}"
}

def printProjectProps() {
    println "\n=== Gradle Project Properties ==="

    //in linux:             export ORG_GRADLE_PROJECT_projectProp_environmentalVariable='projectProp from environmentalVariable'
    println "projectProp_environmentalVariable: ${getProjectProp('projectProp_environmentalVariable')}"
    println "projectProp_propertyFile: ${getProjectProp('projectProp_propertyFile')}"
    //gradle :gradlePropertiesStudy:displayProperties -PprojectProp_dashP='projectProp from -P'
    println "projectProp_dashP: ${getProjectProp('projectProp_dashP')}"

    //gradle :gradlePropertiesStudy:displayProperties -Dorg.gradle.project.projectProp_dashD='projectProp from -D'
    //make sure it starts with org.gradle.project.
    println "projectProp_dashD: ${getProjectProp('projectProp_dashD')}"

}

def String getProjectProp(String propertyName) {
    if (hasProperty(propertyName)) {
        return this.properties[propertyName]
    }
    return "N/A"
}

demo gradle.properties

projectProp_propertyFile=projectProp from propertyFile
systemProp.systemProp_propertyFile=systemProp from propertyFile

demo cli command

hunter@hunter-ubu:~/workspaces/groovy$ gradle -q :gradlePropertiesStudy:displayProperties -PprojectProp_dashP='projectProp from -P' -DsystemProp_dashD='systemProp from -D' -Dorg.gradle.project.projectProp_dashD='projectProp from -D'

=== System Properties ===
systemProp_environmentalVariable: systemProp from environmentalVariable
systemProp_propertyFile: systemProp from propertyFile
systemProp_dashD: systemProp from -D

=== Gradle Project Properties ===
projectProp_environmentalVariable: projectProp from environmentalVariable
projectProp_propertyFile: projectProp from propertyFile
projectProp_dashP: projectProp from -P
projectProp_dashD: projectProp from -D

主要還是參考下我提供的這個例子艾蓝,里面列舉了所有傳遞參數(shù)的方式力崇。

總結

Command-line -P properties are "project properties"
Command-line -D properties are, with one exception, "system properties",use System.getProperty("xxxx")
Command-line -D properties that begin with org.gradle.project. are "project properties"
Properties specified in gradle.properties are, with one exception, "project properties"
Properties specified in gradle.properties that begin with systemProp. are "system properties",use System.getProperty("xxxx")
Properties specified via environment variable are, with one exception, "enviroment properties",use system.getenv("xxxx")
Properties specified via environment variables that begin with ORG_GRADLE_PROJECT_ are "project properties"
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市赢织,隨后出現(xiàn)的幾起案子亮靴,更是在濱河造成了極大的恐慌,老刑警劉巖敌厘,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件台猴,死亡現(xiàn)場離奇詭異,居然都是意外死亡俱两,警方通過查閱死者的電腦和手機饱狂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宪彩,“玉大人休讳,你說我怎么就攤上這事∧蚩祝” “怎么了俊柔?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長活合。 經(jīng)常有香客問我雏婶,道長,這世上最難降的妖魔是什么白指? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任留晚,我火速辦了婚禮,結果婚禮上告嘲,老公的妹妹穿的比我還像新娘错维。我一直安慰自己,他們只是感情好橄唬,可當我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布赋焕。 她就那樣靜靜地躺著,像睡著了一般仰楚。 火紅的嫁衣襯著肌膚如雪隆判。 梳的紋絲不亂的頭發(fā)上犬庇,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天,我揣著相機與錄音蜜氨,去河邊找鬼械筛。 笑死捎泻,一個胖子當著我的面吹牛飒炎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播笆豁,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼郎汪,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了闯狱?” 一聲冷哼從身側響起煞赢,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎哄孤,沒想到半個月后照筑,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡瘦陈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年凝危,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晨逝。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡蛾默,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出捉貌,到底是詐尸還是另有隱情支鸡,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布趁窃,位于F島的核電站牧挣,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏醒陆。R本人自食惡果不足惜瀑构,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望统求。 院中可真熱鬧检碗,春花似錦、人聲如沸码邻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽像屋。三九已至怕犁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背奏甫。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工戈轿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人阵子。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓思杯,卻偏偏與公主長得像,于是被迫代替她去往敵國和親挠进。 傳聞我的和親對象是個殘疾皇子色乾,可洞房花燭夜當晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內(nèi)容