摘要:你也可以定義自己的屬性。允許用戶通過擴展屬性自定義一些變量。這是因為定義的閉包將設(shè)置成了當(dāng)前的。還為我們提供了多種方法來自定義的。在這個屬性文件中聲明的屬性對所有的項目可用。
讀取和設(shè)置Project和Task的屬性是很重要的一塊內(nèi)容,每個Project和Task實例都提供了可以通過getter和setter方法訪問的屬性。一個屬性可能是一個任務(wù)的描述或者項目的版本。你也可以定義自己的屬性。Gradle允許用戶通過擴展屬性自定義一些變量。還有,很多Plugin都會加入擴展屬性,可以通過設(shè)置屬性來控制使用Pulgin。
1 Project自帶的屬性
Gradle在默認情況下已經(jīng)為Project定義了很多屬性,其中比較常用的有:
project:Project本身對象
name:Project的名字
path:Project的絕對路徑
description:Project的描述信息
buildDir:Project構(gòu)建結(jié)果存放目錄
version:Project的版本號
屬性都可以通過getter和setter方法來訪問,也可以直接使用點好的形式來訪問,例如:
setDescription("myProject") println "Description of project $name: "+project.description
當(dāng)在build.gradle中訪問屬性和方法的時候,不需要使用project變量,它會假設(shè)你使用的是project實例。但是有一些情況需要注意,例如:
version = "this is the project version" description = "this is the project description" task showProjectProperties << { println version println project.description println description }
由于Task本身也有description屬性,所以當(dāng)在Task中,如果不顯式的指定project,就會打印的是Task的description。這是因為定義Task的閉包將delegate設(shè)置成了當(dāng)前的Task。有關(guān)delegate的介紹,我們可以看前一篇文章。
Gradle還為我們提供了多種方法來自定義Project的Property。
2 額外屬性
Gradle的很多領(lǐng)域模型類提供了特別的屬性支持。在內(nèi)部,這些屬性以簡直對的形式存儲。為了添加屬性,你需要使用ext命名空間。
// 只在初始聲明額外屬性時需要使用ext命名空間 project.ext.myProp="myValue" ext{ someOtherProp=123 } // 使用ext命名空間訪問屬性是可選的 assert myProp=="myValue" println project.someOtherProp ext.someOtherProp=567
類似的,額外的屬性也可以通過屬性文件來提供。
3 Gradle屬性
Gradle屬性可以通過在gradle.properties文件中聲明直接添加到項目中,這個文件位于
在這個屬性文件中聲明的屬性對所有的項目可用。
我們假設(shè)在gradle.properties文件中聲明的:
exampleProp=myValue someOtherProp=455
可以按照如下方式訪問項目中的這兩個變量
assert project.exampleProp=="myValue" task printGradleProperties <<{ println "Second property :$someOtherProp" }
4 聲明屬性的其他方式
前面兩種方式,我們大多用來聲明自定義變量及其值。Gradle也提供了很多其他方式為構(gòu)建提供屬性。
4.1 項目屬性通過 -P命令行選項提供
對于下面的例子,
task printMyProperties <<{ println myProperties }
如果我們直接執(zhí)行 gradle -q printMyProperties 命令,會報錯:
* What went wrong: Execution failed for task ":printMyProperties". > Could not get unknown property "myProperties" for task ":printMyProperties" of type org.gradle.api.DefaultTask.
這是因為myProperties屬性沒有定義,所以我們在調(diào)用gradle命令的時候可以通過 -P 命令來傳參數(shù),就可以把這個屬性打印出來。
gradle -q -P myProperties="this is -P params" printMyProperties
4.2 系統(tǒng)屬性通過 -D命令行選項提供
與在Java中類似的,我們在Gradle中也可以通過-D來定義JVM的系統(tǒng)參數(shù),只是需要增加一些約定,每個通過-D 方式聲明的屬性前面都要以“org.gradle.project”為前綴,例如:
gradle -q -D org.gradle.project.myProperties="this is -D params" printMyProperties
4.3 環(huán)境屬性模式提供
我們可以通過設(shè)置環(huán)境變量的形式來設(shè)置Project的屬性。但是也要增加一些約定,例如每個屬性前面都要加上一個ORG_GRADLE_PROJECT_的前綴,例如:
ORG_GRADLE_PROJECT_propertyName=someValue
當(dāng)你再去執(zhí)行printMyProperties這個task的時候就不用傳參數(shù)了。
歡迎加入學(xué)習(xí)交流群569772982,大家一起學(xué)習(xí)交流。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/67775.html
摘要:時間年月日星期二說明本文部分內(nèi)容均來自慕課網(wǎng)。項目一個項目代表一個正在構(gòu)建的組件比如一個文件,當(dāng)構(gòu)建啟動后,會基于實例化一個類,并且能夠通過變量使其隱式可用。任務(wù)動作定義了一個最小的工作單元。 時間:2017年05月16日星期二說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)示例源碼:無個人學(xué)習(xí)源碼:https://github.com/zccod...
via: https://tianyu94.com/2019/06/... Make the impossible possible, make the possible easy, and make the easy elegant Gradle is Groovy Minimize Coupling, Maximize Cohesion Task 任務(wù) task helloWorld {...
閱讀 984·2021-11-24 09:39
閱讀 2185·2021-11-16 11:54
閱讀 2077·2021-11-11 17:22
閱讀 2372·2021-09-30 09:55
閱讀 3591·2021-08-12 13:22
閱讀 1626·2019-08-30 15:44
閱讀 1168·2019-08-29 12:12
閱讀 3263·2019-08-27 10:58