gradle 指定springcloud 版本_Gradle初探
1、安裝gradle
brew?install?gradle2、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?world3、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?tasksGradle Help任務:Gradle內置了一個help task,了解每一個Task的使用幫助。
./gradlew?help?--task?tasks強制刷新依賴:
./gradlew?--refresh-dependencies?assemble多任務調用:執行jar之前先clean,只需按順序空格分開。
./gradlew?clean?jar通過任務名縮寫執行:Gradle 提供了基于駝峰命名的縮寫調用,如doCheck任務。
./gradlew?dc6、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初探的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 百度移动应用安卓_昔日明星91助手和安卓
- 下一篇: java oss 批量传输_初步使用阿里