一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Gradle 創建Task的多種方法

Gradle 創建Task的多種方法

2022-03-08 00:47無知者云 Java教程

本文主要介紹了Gradle 創建Task的多種方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

 在本系列的上篇文章中,我們講到了Gradle入門,在本篇文章中我們將講到創建Task的多種方法。

  Gradle的Project從本質上說只是含有多個Task的容器,一個Task與Ant的Target相似,表示一個邏輯上的執行單元。我們可以通過很多種方式定義Task,所有的Task都存放在Project的TaskContainer中。

(1)調用Project的task()方法創建Task

  在使用Gradle時,創建Task最常見的方式便是:

?
1
2
3
task hello1 << {
   println 'hello1'
}

  這里的“<<”表示追加的意思,即向hello中加入執行過程。我們還可以使用doLast來達到同樣的效果:

?
1
2
3
4
task hello2 {
   doLast {
      println 'hello2'}
}

  另外,如果需要向Task的最前面加入執行過程,我們可以使用doFirst:

?
1
2
3
4
task hello3 {
   doFirst {
      println 'hello3'}
}

  在上面的3個例子中,Gradle的DSL向我們展示了一種非常自然的風格來創建Task,而事實上這些都只是一種內部DSL,也即必須符合groovy的語法要求。上面的task關鍵字實際上是一個方法調用,該方法屬于Project。Project中存在多個重載的task()方法。和Ruby等動態語言一樣,在調用groovy方法時,我們不用將參數放在括號里面。

  以上我們自定義的3個Task都位于TaskContainer中,Project中的tasks屬性即表示該TaskContainer。為此,我們可以新建一個Task來顯示這些信息:

?
1
2
3
4
task showTasks {
   println tasks.class
   println tasks.size()
}

  將以上4個Task放在同一個build.gradle中,再執行gradle showTasks,命令行輸出如下:

...
class org.gradle.api.internal.tasks.DefaultTaskContainer_Decorated
4
... 

  上面的DefaultTaskContainer_Decorated表示tasks類型,而4表示該TaskContainer中包含有4個自定義的Task——包括showTasks本身。 

(2)通過TaskContainer的create()方法創建Task

  在上文中我們講到,通過task()方法創建的Task都被存放在了TaskContainer中,而Project又維護了一個TaskContainer類型的屬性tasks,那么我們完全可以直接向TaskContainer里面添加Task。查查TaskContainer的API文檔可以發現,TaskContainer向我們提供了大量重載的create()方法用于添加Task。

?
1
2
3
tasks.create(name: 'hello4') << {
   println 'hello4'
}

(3)聲明Task之間的依賴關系

  Task之間是可以存在依賴關系,比如TaskA依賴TaskB,那么在執行TaskA時,Gradle會先執行TaskB,再執行TaskA。我們可以在定義一個Task的同時聲明它的依賴關系:

?
1
2
3
task hello5(dependsOn:hello4) << {
    println 'hello5'
}

  當然,我們也可以在定義Task之后再聲明依賴:

?
1
2
3
4
5
task hello6 << {
   println 'hello6'
}
 
hello6.dependsOn hello5

(4)配置Task

  一個Task除了執行操作之外,還可以包含多個Property,其中有Gradle為每個Task默認定義的Property,比如description,logger等。另外,每一個特定的Task類型還可以含有特定的Property,比如Copy的from和to等。當然,我們還可以動態地向Task中加入額外的Property。在執行一個Task之前,我們通常都需要先設定Property的值,Gradle提供了多種方法設置Task的Property值。

  首先,我們可以在定義Task的時候對Property進行配置:

?
1
2
3
4
task hello7 << {
   description = "this is hello7"
   println description
}

  我們還可以通過閉包的方式來配置一個已有的Task:

?
1
2
3
4
5
6
7
task hello8 << {
println description
}
 
hello8 {
description = "this is hello8"
}

  需要注意的是,對hello8的description設置發生在創建該Task之后,在執行“gradle hello8”時,命令行依然可以打印出正確的“this is hello8”,這是因為Gradle在執行Task時分為兩個階段,首先是配置階段,然后才是實際執行階段。所以在執行hello8之前,Gradle會掃描整個build.gradle文檔,將hello8的description設置為“this is hello8”,然后執行hello8,此時hello8的description已經包含了設置后的值。

  我們還可以通過調用Task的configure()方法完成Property的設置:

?
1
2
3
4
5
6
7
task hello9 << {
   println description
}
 
hello9.configure {
   description = "this is hello9"
}

  實際上,通過閉包的方式配置Task在內部也是通過調用Task的configure()方法完成的,對此我們將在后續的文章中詳細地講到。

請通過以下方式下載本系列文章的Github示例代碼:

?
1
git clone https://github.com/davenkin/gradle-learning.git

到此這篇關于Gradle 創建Task的多種方法的文章就介紹到這了,更多相關Gradle 創建Task內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://www.cnblogs.com/davenkin/p/gradle-learning-2.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 大桥未久aⅴ一区二区 | 亚洲www美色 | 91超级碰 | 白丝vk丨tk失禁 | 91制片厂制作传媒网站破解 | 高清视频大片免费观看 | 欧美有码 | 国产区小视频 | 国产视频三区 | 国产香蕉一区二区在线观看 | 国产精品网站在线观看 | 国产精品一级片 | 亚洲国产精品综合久久一线 | 久久精品动漫网一区二区 | 亚洲精品一区二区久久久久 | 三级网站午夜三级 | 国产日韩高清一区二区三区 | 日韩欧美在线视频一区二区 | 国产精品国色综合久久 | 亚洲欧美精品一区二区 | 2020年精品国产午夜福利在线 | 87影院在线观看视频在线观看 | 手机在线观看国产精选免费 | 亚洲精品高清中文字幕完整版 | 四虎永久在线精品波多野结衣 | 男人猛进猛出女人下面视频 | 男女肉粗暴进来下面好紧 | 久久这里只精品国产99re66 | 午夜宅男影院 | 日本mv精品中文字幕 | 黑帮少爷爱上我第8集最新 荷兰精品女人性hd 和日本免费不卡在线v | 欧美一级片在线免费观看 | 99看视频 | 极品91 | 天天综合五月天 | 亚洲欧洲日产国码天堂 | 国产91视频网 | 狠狠的撞击发泄h | 91chinese 永久免费 | 国产91视频网| 久久AV喷吹AV高潮欧美 |