国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Gradle學習3——自定義屬性

cc17 / 1417人閱讀

摘要:你也可以定義自己的屬性。允許用戶通過擴展屬性自定義一些變量。這是因為定義的閉包將設置成了當前的。還為我們提供了多種方法來自定義的。在這個屬性文件中聲明的屬性對所有的項目可用。

讀取和設置Project和Task的屬性是很重要的一塊內容,每個Project和Task實例都提供了可以通過getter和setter方法訪問的屬性。一個屬性可能是一個任務的描述或者項目的版本。你也可以定義自己的屬性。Gradle允許用戶通過擴展屬性自定義一些變量。還有,很多Plugin都會加入擴展屬性,可以通過設置屬性來控制使用Pulgin。

1 Project自帶的屬性

Gradle在默認情況下已經為Project定義了很多屬性,其中比較常用的有:
project:Project本身對象
name:Project的名字
path:Project的絕對路徑
description:Project的描述信息
buildDir:Project構建結果存放目錄
version:Project的版本號
屬性都可以通過getter和setter方法來訪問,也可以直接使用點好的形式來訪問,例如:

setDescription("myProject")
println "Description of project $name: "+project.description

當在build.gradle中訪問屬性和方法的時候,不需要使用project變量,它會假設你使用的是project實例。但是有一些情況需要注意,例如:

version = "this is the project version"
description = "this is the project description"

task showProjectProperties << {
   println version
   println project.description
   println description
}

由于Task本身也有description屬性,所以當在Task中,如果不顯式的指定project,就會打印的是Task的description。這是因為定義Task的閉包將delegate設置成了當前的Task。有關delegate的介紹,我們可以看前一篇文章。
Gradle還為我們提供了多種方法來自定義Project的Property。

2 額外屬性

Gradle的很多領域模型類提供了特別的屬性支持。在內部,這些屬性以簡直對的形式存儲。為了添加屬性,你需要使用ext命名空間。

// 只在初始聲明額外屬性時需要使用ext命名空間
project.ext.myProp="myValue"

ext{
        someOtherProp=123
}

// 使用ext命名空間訪問屬性是可選的
assert myProp=="myValue"

println project.someOtherProp

ext.someOtherProp=567

類似的,額外的屬性也可以通過屬性文件來提供。

3 Gradle屬性

Gradle屬性可以通過在gradle.properties文件中聲明直接添加到項目中,這個文件位于/.gradle目錄或者項目的根目錄下。這些屬性可以通過項目實例訪問。即使有多個項目,每個用戶也只有能一個Gradle屬性文件在xx/.gradle目錄下,這是目前Gradle對它的限制。

在這個屬性文件中聲明的屬性對所有的項目可用。
我們假設在gradle.properties文件中聲明的:

exampleProp=myValue
someOtherProp=455

可以按照如下方式訪問項目中的這兩個變量

assert project.exampleProp=="myValue"

task printGradleProperties <<{
    println "Second property :$someOtherProp"
}

4 聲明屬性的其他方式

前面兩種方式,我們大多用來聲明自定義變量及其值。Gradle也提供了很多其他方式為構建提供屬性。

4.1 項目屬性通過 -P命令行選項提供

對于下面的例子,

task printMyProperties <<{
    println myProperties
}

如果我們直接執行 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屬性沒有定義,所以我們在調用gradle命令的時候可以通過 -P 命令來傳參數,就可以把這個屬性打印出來。

gradle -q -P myProperties="this is -P params"  printMyProperties

4.2 系統屬性通過 -D命令行選項提供

與在Java中類似的,我們在Gradle中也可以通過-D來定義JVM的系統參數,只是需要增加一些約定,每個通過-D 方式聲明的屬性前面都要以“org.gradle.project”為前綴,例如:

gradle -q -D org.gradle.project.myProperties="this is -D params"  printMyProperties

4.3 環境屬性模式提供

我們可以通過設置環境變量的形式來設置Project的屬性。但是也要增加一些約定,例如每個屬性前面都要加上一個ORG_GRADLE_PROJECT_的前綴,例如:

ORG_GRADLE_PROJECT_propertyName=someValue

當你再去執行printMyProperties這個task的時候就不用傳參數了。

歡迎加入學習交流群569772982,大家一起學習交流。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/67775.html

相關文章

  • 慕課網_《新一代構建工具gradle學習總結

    摘要:時間年月日星期二說明本文部分內容均來自慕課網。項目一個項目代表一個正在構建的組件比如一個文件,當構建啟動后,會基于實例化一個類,并且能夠通過變量使其隱式可用。任務動作定義了一個最小的工作單元。 時間:2017年05月16日星期二說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學示例源碼:無個人學習源碼:https://github.com/zccod...

    antyiwei 評論0 收藏0
  • Gradle 筆記

    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 任務 task helloWorld {...

    coordinate35 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<