日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

gradle 指定springcloud 版本_Gradle初探

發布時間:2025/3/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gradle 指定springcloud 版本_Gradle初探 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、安裝gradle

brew?install?gradle

2、Hello World

1、創建構建腳本文件:build.gradle

2、編寫構建腳本:

task?hello{
?doLast{
??println?'hello?world'
?}
}

task:構建腳本定義一個任務,并取名。doLast:構建腳本給任務添加一個動作Action,在task執行完畢后,要回調doLast這部分閉包的業務代碼邏輯或者叫回調實現。

3、執行構建腳本:

gradle?-q?hello

執行gradle命令,會默認加載當前目錄下的build.gradle腳本文件,也可以通過-b參數指定加載執行的文件。

-q 控制gradle輸出的日志級別。

Groovy將println()添加java.lang.Object,方法調用可以省略括號,以空格分開,單引號雙引號包含內容都是字符串。

4、輸出:

hello?world

3、Gradle Wrapper

gradle wrapper

gradle wrapper 是對Gradle的一層包裝,便于在開發過程中統一Gradle構建的版本。

gradle?wrapper

自動生成Wrapper所需要的目錄文件。

gradlew和gradlew.bat是Linux和Windows下的可執行腳本。

指令參數:

--gradle-version?指定使用的gradle版本
--gradle-distribution-url?指定下載gradle發行版的url地址

gradle-wrapper.properties

配置字段:

distributionBase?下載的Gradle壓縮包解壓后存儲的主目錄?
distributionPath?相對于distributionBase的解壓后的Gradle壓縮包的路徑?
zipStoreBase?同distributionBase,只不過是存放zip壓縮包的?
zipStorePath?同distributionPath,只不過是存放zip壓縮包的?
distributionUrl?Gradle發行版壓縮包的下載地址

wrapper task

自定義wrapper task:

task?wrapper(type:?Wrapper){
???gradleVersion?=?'6.5.1'
???archiveBase?=?'GRADLE_USER_HOME'
???archivePath?=?'wrapper/dists'
???distributionBase?=?'GRADLE_USER_HOME'
???distributionPath?=?'wrapper/dists'
???distributionUrl?=?'http://services.gradle.org/distributions/gradle-6.5.1-all.zip'
}

4、Gradle日志

日志級別:

ERROR?錯誤信息
QUIET?重要信息
WARNING?警告信息
LIFECYCLE?進度信息
INFO?內容信息
DEBUG?調試信息

設置日志開關選項:

#?輸出QUIET級別及其之上的日志信息
gradle?-q?tasks
無選項?LIFECYCLE及更高級別
-q?或?--quiet?QUIRT及更高級別
-i?或?--info?INFO及更高級別
-d?或?--debug?DEBUG及更高級別(全部日志)

設置錯誤堆棧開關選項:

無選項?不輸出堆棧信息
-s?或?--stacktrace?輸出關鍵性的堆棧信息
-S?或?--full-stacktrace?輸出全部堆棧信息

使用日志信息調試:其實是調用Project的getLogger獲取Logger對象的實例。

logger.quiet('quiet?日志')
logger.error('error?日志')
logger.warn('warn?日志')
logger.lifecycle('lifecycle?日志')
logger.info('info?日志')
logger.debug('debug?日志')

5、Gradle命令行

幫助:

./gradlew?-?
./gradlew?-h
./gradlew?-help

查看所有可執行Tasks:

./gradlew?tasks

Gradle Help任務:Gradle內置了一個help task,了解每一個Task的使用幫助。

./gradlew?help?--task?tasks

強制刷新依賴:

./gradlew?--refresh-dependencies?assemble

多任務調用:執行jar之前先clean,只需按順序空格分開。

./gradlew?clean?jar

通過任務名縮寫執行:Gradle 提供了基于駝峰命名的縮寫調用,如doCheck任務。

./gradlew?dc

6、Groovy

Groovy是基于JVM的一種動態腳本語言,支持閉包,支持DSL。

字符串

Groovy中,分號不是必須的。單引號和雙引號都表示字符串,但是只有雙引號里才能做表達式運算。表達式:

${表達式}
$單個變量

集合

Groovy兼容了Java集合,并進行擴展。

List:

????class?ListTest?{
????????public?static?void?main(String[]?args)?{
????????????//創建ArrayList
????????????def?list?=?[1,?2,?3,?4,?5]
????????????//[1,?2,?3,?4,?5]
????????????println?list
????????????//java.util.ArrayList
????????????println?list.getClass().getName()
????????????//1
????????????println?list[0]
????????????//最后一個元素?5
????????????println?list[list.size()?-?1]
????????????//最后一個元素?5
????????????println?list[-1]
????????????//倒數第二個元素?4
????????????println?list[-2]
????????????//使用Range對象獲取集合中的幾個連續值[3,?4,?5]
????????????println?list[2..4]
????
????????????def?subList?=?list[2..4]
????????????//
????????????println?list.dump()
????????????//
????????????println?subList.dump()
????????????//[1,?2,?3,?4,?5]
????????????println?list[0..list.size()?-?1]
????????????//[2,?3,?4,?5]
????????????println?list[1?-?list.size()..-1]
????????????//true
????????????println?![]
????????????//true
????????????println([1]?&&?['a']?&&?[0]?&&?[0.0]?&&?[false]?&&?[null])
????????????//正向迭代?12345
????????????list.each?{?print?it?}
????????????//反向迭代?54321
????????????list.reverseEach?{?print?it?}
????????????println()
????????????//如果關注迭代的索引和計數
????????????list.eachWithIndex?{?int?entry,?int?i?->?println?"value:"?+?entry.intValue()?+?"==index:"?+?i?}
????????????//閉包中的元素求和?15
????????????def?sum?=?0
????????????list.each?{?sum?+=?it?}
????????????println?sum
????????????//[2,?4,?6,?8,?10]
????????????def?result?=?[]
????????????//<????????????list.each?{?result?<????????????println?result
????????????//在集合中的每個元素上執行操作并返回一個結果集合使用collect
????????????//[3,?6,?9,?12,?15]
????????????println?list.collect?{?it?*?3?}
????????????//find會對集合進行迭代,當閉包返回true則終止迭代(匹配第一個),會將當前元素返回
????????????//如果遍歷結束也找到,則返回null.以下輸出:4
????????????println?list.find?{?it?==?4?}
????????????//以下輸出索引3
????????????println?list.findIndexOf?{?it?==?4?}
????????????//findAll?查找所有返回的是對象[3,?4,?5]
????????????println?list.findAll?{?it?>?2?}
????????}
????}????def?static?listIterator()?{

????????def?list?=?[1,?2,?3,?4,?5]

????????//正向迭代?12345
????????list.each?{?print?it?}
????????//反向迭代?54321
????????list.reverseEach?{?print?it?}

????????println()

????????//如果關注迭代的索引和計數
????????list.eachWithIndex?{?int?entry,?int?i?->
????????????println?"value:"?+?entry.intValue()?+?"==index:"?+?i
????????}
????????//閉包中的元素求和?15
????????def?sum?=?0
????????list.each?{?sum?+=?it?}
????????println?sum

????????//[2,?4,?6,?8,?10]
????????def?result?=?[]
????????//<????????list.each?{?result?<????????println?result

????????//在集合中的每個元素上執行操作并返回一個結果集合使用collect
????????//[3,?6,?9,?12,?15]
????????println?list.collect?{?it?*?3?}

????????//find會對集合進行迭代,當閉包返回true則終止迭代(匹配第一個),會將當前元素返回
????????//如果遍歷結束也沒找到,則返回null.以下輸出:4
????????println?list.find?{?it?==?4?}
????????//以下輸出索引3
????????println?list.findIndexOf?{?it?==?4?}
????????//findAll?查找所有返回的是對象[3,?4,?5]
????????println?list.findAll?{?it?>?2?}
????????
?????????//30
????????println?list.collect({?it?*?2?}).sum()

????????//inject對集合中的每個元素都調用閉包,0為初始值?。輸出:15
????????println?list.inject(0)?{?total,?ele?->?total?+?ele?}
????????//連接集合中的每個元素,輸出:1,2,3,4,5
????????println?list.join(",")
????}

Map:

????def?static?mapBasic(){
????????????//定義空map
????????????def?emptyMap?=?[:]
????????????println?emptyMap
????
????????????//定義多個key的map?,默認情況下?沒有引號,''或者""的key都是字符串類型
????????????def?map?=?[aa:?"jannal",?'2':?"lisi",?"3":?"wangwu"]
????????????//java.util.LinkedHashMap
????????????println?map.getClass().name
????
????????????//添加key
????????????map?<'4':?"jannal2"]
????????????map.put('5',?"jannal3");
????????????//移除key
????????????map?=?map?-?['4':?"jannal2"]
????????????map?-=?['4':?"jannal2"]
????????????map.remove("5")
????
????
????????????//訪問鍵的值?輸出:jannal
????????????println?map["aa"]
????????????//可通過.來訪問,如果key特殊,可通過""
????????????println?map."aa"
????????????println?map.aa
????
????????????//如果key不存在,返回一個默認值
????????????println?map.get("4","44444")
????
????
????????}
????
????
????????def??static?mapCollect(){
????????????//?通過list創建map
????????????def?wordList?=?['Apple',?'Banana',?'Cat']
????????????//[Apple:5,?Banana:6,?Cat:3]
????????????def?wordCountMap?=?wordList.collectEntries{?[(it):it.length()]?}
????????????println(wordCountMap)
????
????
????????????def?longWords?=?wordCountMap.count?{?key,?value->
????????????????value?>=?4
????????????}
????????????//2
????????????println?"${longWords}"
????
????
????????????//合并map
????????????def?map1?=?[p1:100,?p2:200]
????????????def?map2?=?[p3:300,?p4:400]
????????????def?map3?=?map1?+?map2
????????????//[p1:100,?p2:200,?p3:300,?p4:400]
????????????println?"${map3}"
????
????????????//取交集
????????????def?map4?=?[p1:100,?p2:200,?p3:300,?p4:400,?p5:500]
????????????def?map5?=?[p4:400,?p5:500,?p6:600,?p7:700]
????????????def?map6?=?map4.intersect(map5)
????????????//[p4:400,?p5:500]
????????????println?"${map6}"
????
????????}
????
????????def?static?iterator(){
????????????def?map?=?[aa:?"jannal",?'2':?"lisi",?"3":?"wangwu"]
????????????//如果只要一個參數,就得到entry,兩個參數得到key和value
????????????//迭代?輸出:?aa?:?jannal?;2?:?lisi?;3?:?wangwu?;
????????????map.each?{?entry?->
????????????????print?"$entry.key?:?$entry.value?;"
????????????}
????????????println()
????
????
????????????//迭代?輸出:?aa?:?jannal?;2?:?lisi?;3?:?wangwu?;[aa1,?21,?31]
????????????map.each?{?key,?value?->
????????????????print?"$key?:?$value?;"
????????????}
????????????println()
????????????//[aa1,?21,?31]
????????????println?map.collect?{?key,?value?->
????????????????key?+?"1"
????????????}
????
????????????//找到即返回該map的key和value?aa=jannal
????????????println?map.find?{?key,?value?->
????????????????key?==?"aa"
????????????}
????????????//找到所有匹配的?[2:lisi,?3:wangwu]
????????????println?map.findAll?{?key,?value?->
????????????????key?==?'2'?||?key?==?'3'
????????????}
????
????????????//不想得到元素,只是確定map中是否有任何元素滿足條件用any
????????????//?輸出:true
????????????//any會查找至少一個滿足給定條件
????????????println?map.any?{?key,?value?->
????????????????key?==?"2"
????????????}
????
????????????//是否所有的元素都滿足條件?輸出:false
????????????println?map.every?{?key,?value?->
????????????????key?==?'2'?||?key?==?'3'
????????????}
????
????????}

方法

括號可以省略。return可以不寫,Groovy會把方法執行過程中的最后一句代碼執行結果作為其返回值。代碼塊可以作為參數傳遞。

Java Bean

組件化、插件化、配置集成等都是基于JavaBean。

閉包 Closure

閉包是DSL的基礎,使得代碼靈活、輕便、可復用,不想Java一樣需要類。

閉包就是代碼塊,當閉包有一個參數時,默認就是it,當有多個參數時,需要把參數一一列出。

閉包委托 Delegate

Groovy閉包支持閉包方法的委托。閉包有thisObject、owner、delegate三個屬性。

this:
該屬性指向定義閉包的類的實例對象。

owner:
該屬性和 this 類似,但是閉包中也可以定義閉包的,如果閉包 A 內定義了閉包 B,那么閉包 B 的 owner 指向的是其外部的閉包 A。

delegate:
該值初始化時是和 owner 相同的,但是該值可以通過接口將其它對象賦值給 delegate,來實現方法的委托功能。
class?Test?{
????def?x?=?300
????def?y?=?400

????def?run()?{
????????def?data?=?[x:?10,?y:?20]
????????def?cl?=?{?y?=?x?+?y?}
????????cl.delegate?=?data
????????cl.resolveStrategy?=?Closure.DELEGATE_FIRST
????????cl()
????????println?x?//這里不是在閉包中,訪問的?x?當然還是成員變量了
????????println?y
??????? println data //?主要是 data,在閉包中期訪問的 x 和 y 均是 data 中,所以其 y 變成了 10+20;
????}
}

new?Test().run()
300
400
[x:10,?y:30]

DSL

Domain Specific Language 領域特定語言。Gradle就是一門基于Groovy專門解決自動化構建的DSL。

----------? END? ----------

推薦我的微信號

加微信送Android,Java,Python資料,交流學習

我的視頻號,已經錄制了幾十期,有編程技術,有工具推薦,有教育知識、副業賺錢但都是原創用心輸出。

讓我知道你在看

總結

以上是生活随笔為你收集整理的gradle 指定springcloud 版本_Gradle初探的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。