一.前言
gradle有突出的版本不兼容問(wèn)題.因此要注意SpringBoot對(duì)Gradle的要求
,以及IDEA對(duì)Gradle的要求
.
在IDEA的plugins/lib/gradle中規(guī)定了gradle的最大版本號(hào). 在2022.2.1中是6.7 在2022.3.2中是7.4.
其余自行查看該位置的版本控制.不過(guò)idea規(guī)定的版本號(hào)可以更改.
查看SpringBoot與Gradle的兼容性
二.下載Gradle
Gradle官網(wǎng)地址
下載完整版解壓后
系統(tǒng)變量配置Gradle倉(cāng)庫(kù)鍵必須為GRADLE_USER_HOME
系統(tǒng)變量配置Gradle全局系統(tǒng)變量 gradle的bin目錄
驗(yàn)證 gradle -v
三.Gradle鏡像源-全局級(jí)配置
Gradle使用maven定位鏡像地址參考: 阿里云云效Maven
全局配置 在Gradle的init.d目錄下新建gradle為后綴的文件.
allprojects {
repositories {
maven { name "Alibaba" ; url "https://maven.aliyun.com/repository/public" }
maven { name "google" ; url 'https://maven.aliyun.com/repository/google' }
mavenCentral()
}
buildscript {
repositories {
maven { name "Alibaba" ; url 'https://maven.aliyun.com/repository/public' }
maven { name "gradle-plugin" ; url 'https://maven.aliyun.com/repository/gradle-plugin' }
maven { name "spring-plugin" ; url 'https://maven.aliyun.com/repository/spring-plugin' }
maven { name "M2" ; url 'https://plugins.gradle.org/m2/' }
}
}
}
四.配置Gradle wrapper-項(xiàng)目級(jí)配置
解決項(xiàng)目在多臺(tái)電腦開(kāi)發(fā)時(shí),Gradle環(huán)境不一致,idea不兼容等問(wèn)題.
Gradle指令調(diào)用本地的gradle腳本.而在項(xiàng)目中應(yīng)當(dāng)運(yùn)行g(shù)radlew才是調(diào)用項(xiàng)目中的wrapper腳本
gradlew wrapper --gradle-version=6.7
當(dāng)執(zhí)行
gradlew.bat classes
gradlew.bat test
gradlew.bat build
等,會(huì)下載gradle相關(guān)內(nèi)容
五.Gradle對(duì)測(cè)試的支持
test{
useJUnitPlatform() // 支持對(duì)junit5測(cè)試
}
五.生命周期
Gradle項(xiàng)目的生命周期分為三大階段: Initialization ->Configuration -> Execution.每個(gè)階段都有自己的職責(zé),具體如下圖所示:
Initialization 只執(zhí)行一次初始化腳本.
Configuration 先執(zhí)行加載父腳本,再是子腳本,再是孫子腳本
5.1 settings文件
六.Gradle任務(wù)入門(mén)
6.1 任務(wù)行為
def map = new HashMap<String,Object>();
//action屬性可以設(shè)置為閉包,設(shè)置task自身的行為
map.put("action",{println "task one.."})
task (map,"task1"){
// 任務(wù)的配置段:在配置階段執(zhí)行
println "最先執(zhí)行"
// 任務(wù)的行為:在執(zhí)行階段執(zhí)行,doFirst會(huì)在doLast執(zhí)行之前執(zhí)行
doFirst {
println "task1 doFirst"
}
doLast {
println "task1 doLast"
}
}
task.doFirst {
println "task1 doFirst outer"
}
task.doLast {
println "task1 doLast outer"
}
6.2 任務(wù)依賴(lài)方式
七. Dependencies依賴(lài)引入
除非涉及到多模塊依賴(lài),為了避免重復(fù)依賴(lài),咱們會(huì)使用api,其它情況我們優(yōu)先選擇implementation,擁有大量的api 依賴(lài)項(xiàng)會(huì)顯著增加構(gòu)建時(shí)間。
7.1 依賴(lài)沖突及解決方案
依賴(lài)沖突是指 “在編譯過(guò)程中, 如果存在某個(gè)依賴(lài)的多個(gè)版本, 構(gòu)建系統(tǒng)應(yīng)該選擇哪個(gè)進(jìn)行構(gòu)建的問(wèn)題”,如下所示:
A、B、C 都是本地子項(xiàng)目 module,log4j 是遠(yuǎn)程依賴(lài)。
編譯時(shí): B 用 1.4.2 版本的 log4j,C 用 2.2.4 版本的 log4j,B 和 C 之間沒(méi)有沖突
打包時(shí): 只能有一個(gè)版本的代碼最終打包進(jìn)最終的A對(duì)應(yīng)的jar |war包,對(duì)于 Gradle 來(lái)說(shuō)這里就有沖突了
默認(rèn)下,Gradle 會(huì)使用最新版本的 jar 包【考慮到新版本的 jar 包一般都是向下兼容的】,實(shí)際開(kāi)發(fā)中,還是建議使用官方自帶的這種解決方案。當(dāng)然除此之外,Gradle 也為我們提供了一系列的解決依賴(lài)沖突的方法: exclude 移除一個(gè)依賴(lài),不允許依賴(lài)傳遞,強(qiáng)制使用某個(gè)版本。
● Exclude 排除某個(gè)依賴(lài)
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1' implementation('org.hibernate:hibernate-core:3.6.3.Final'){
//排除某一個(gè)庫(kù)(slf4j)依賴(lài):如下三種寫(xiě)法都行
exclude group: 'org.slf4j' exclude module: 'slf4j-api'
exclude group: 'org.slf4j',module: 'slf4j-api'
}
//排除之后,使用手動(dòng)的引入即可。implementation 'org.slf4j:slf4j-api:1.4.0'
}
● 不允許依賴(lài)傳遞 在添加依賴(lài)項(xiàng)時(shí),如果設(shè)置 transitive 為false,表示關(guān)閉依賴(lài)傳遞。即內(nèi)部的所有依賴(lài)將不會(huì)添加到編譯和運(yùn)行時(shí)的類(lèi)路徑。
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1' implementation('org.hibernate:hibernate-core:3.6.3.Final'){
//不允許依賴(lài)傳遞,一般不用
transitive(false)
}
//排除之后,使用手動(dòng)的引入即可implementation 'org.slf4j:slf4j-api:1.4.0'
}
● 強(qiáng)制使用某個(gè)版本
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1' implementation('org.hibernate:hibernate-core:3.6.3.Final')
//強(qiáng)制使用某個(gè)版本!!【官方建議使用這種方式】
implementation('org.slf4j:slf4j-api:1.4.0!!')
//這種效果和上面那種一樣,強(qiáng)制指定某個(gè)版本implementation('org.slf4j:slf4j-api:1.4.0'){
version{
strictly("1.4.0")
}
}
}
八.Gradle整合多模塊SpringBoot
SpringBoot官網(wǎng)整合說(shuō)明
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
模塊聚合./settings.gradle
新建.gradle后綴的文件做版本管理
config.gradle
ext {
lombokVerison = '1.18.24'
mybatisPlusVersion = '3.5.2'
druidVersion = '1.2.8'
mysqlVersion = '8.0.32'
commonsVersion = '3.12.0'
}
./build.gradle抽取公共配置, 編碼,環(huán)境,鏡像源
// 加載構(gòu)建期需要的插件
buildscript {
repositories {
maven { name "Alibaba"; url 'https://maven.aliyun.com/repository/public' }
maven { name "google"; url 'https://maven.aliyun.com/repository/google' }
maven { name "gradle-plugin"; url 'https://maven.aliyun.com/repository/gradle-plugin' }
maven { name "spring-plugin"; url 'https://maven.aliyun.com/repository/spring-plugin' }
maven { name "M2"; url 'https://plugins.gradle.org/m2/' }
mavenCentral()
}
// 維護(hù)插件版本
dependencies {
classpath('org.springframework.boot:spring-boot-gradle-plugin:2.6.3')
}
}
// 導(dǎo)入插件
plugins {
id 'java-library'
}
group 'com.vector'
version '1.0-SNAPSHOT'
// 讀取gradle版本配置
apply from: 'config.gradle'
// 對(duì)所有子模塊做統(tǒng)一管理
subprojects {
//添加插件 目前Gradle版本不支持在allprojects下聲明plugins,使用的是舊的寫(xiě)法
apply plugin: 'java-library'
apply plugin: 'org.springframework.boot' //維護(hù)springboot版本號(hào),不單獨(dú)使用,和下面兩個(gè)插件一起用
apply plugin: 'io.spring.dependency-management'// 相當(dāng)于<dependencyManagement>版本管理
//基本JDK配置sourceCompatibility = 1.8
sourceCompatibility = 1.8
targetCompatibility = 1.8
compileJava.options.encoding "UTF-8"
compileTestJava.options.encoding "UTF-8"
tasks.withType(JavaCompile).configureEach {
options.encoding = "UTF-8"
}
// SpringBoot Plugin生效的非常關(guān)鍵的設(shè)置
// 主啟動(dòng)類(lèi)位置
bootJar {
mainClass.set('org.vector.Main')
}
//依賴(lài)的配置:設(shè)置通用的依賴(lài)
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine'
compileOnly group: 'org.projectlombok', name: 'lombok', version: lombokVerison
}
test {
useJUnitPlatform()
}
}
project("module01") {
apply plugin: 'java-library'//支持api
dependencies {
compileOnly group: 'org.projectlombok', name: 'lombok', version: lombokVerison
}
}
project("module02") {
apply plugin: 'java-library'//支持api
dependencies {
// implementation不會(huì)進(jìn)行依賴(lài)傳遞. api可以進(jìn)行依賴(lài)傳遞
api project(':module01')
// mp持久化框架
implementation group: 'com.baomidou', name: 'mybatis-plus-boot-starter', version: mybatisPlusVersion
// druid連接池
implementation group: 'com.alibaba', name: 'druid-spring-boot-starter', version: druidVersion
// mysql數(shù)據(jù)庫(kù)
implementation group: 'mysql', name: 'mysql-connector-java', version: mysqlVersion
}
}
project("module03") {
dependencies {
// 不需要在繼續(xù)依賴(lài)傳遞
implementation project(':module02')
// spring-boot-starter-web
implementation 'org.springframework.boot:spring-boot-starter-web'
//spring-boot-starter-test
testImplementation 'org.springframework.boot:spring-boot-starter-test'
// spring-boot-starter-aop
implementation 'org.springframework.boot:spring-boot-starter-aop'
//spring-boot-starter-data-redis
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
// commons工具類(lèi)
implementation group: 'org.apache.commons', name: 'commons-lang3', version: commonsVersion
}
}
那么可以自行探尋更優(yōu)雅的寫(xiě)法.
九. Gradle整合微服務(wù)SpringCloud
項(xiàng)目結(jié)構(gòu)
創(chuàng)建version.gradle
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-765321.html
ext {
version = [
"lombokVerison" : "1.18.24",
"mybatisPlusVersion": "3.5.2",
"druidVersion" : "1.2.8",
"mysqlVersion" : "8.0.32",
"commonsVersion" : "3.12.0"
]
// 公共依賴(lài)
dependencies = [
"lombok" : "org.projectlombok:lombok:${version.lombokVerison}",
"druid" : "com.alibaba:druid-spring-boot-starter:${version.druidVersion}",
"mysql" : "mysql:mysql-connector-java:${version.mysqlVersion}",
"common-lang3": "org.apache.commons:commons-lang3:${version.commonsVersion}",
"mybatisPlus" : "com.baomidou:mybatis-plus-boot-starter:${version.mybatisPlusVersion}"
]
}
./build.gradle
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-765321.html
description '微服務(wù)父工程'
//構(gòu)建Gradle腳本自身需要的資源,可以聲明的資源包括依賴(lài)項(xiàng)、第三方插件、maven倉(cāng)庫(kù)地址等。
buildscript {
ext {
springBootVersion = '2.6.3'
springCloudversion = '2021.0.1'
springCloudAlibabaVersion = '2021.1'
springBootGradlePlugin = '2.6.3'
}
repositories {
maven { name "Alibaba"; url 'https://maven.aliyun.com/repository/public' }
maven { name "google"; url 'https://maven.aliyun.com/repository/google' }
maven { name "gradle-plugin"; url 'https://maven.aliyun.com/repository/gradle-plugin' }
maven { name "spring-plugin"; url 'https://maven.aliyun.com/repository/spring-plugin' }
maven { name "M2"; url 'https://plugins.gradle.org/m2/' }
mavenCentral()
}
// 維護(hù)插件版本
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootGradlePlugin}")
}
}
group 'com.vector'
version '1.0-SNAPSHOT'
// 讀取gradle版本配置
apply from: 'version.gradle'
// 對(duì)所有子模塊做統(tǒng)一管理
subprojects {
//添加插件 目前Gradle版本不支持在allprojects下聲明plugins,使用的是舊的寫(xiě)法
apply plugin: 'java-library'
apply plugin: 'org.springframework.boot' //維護(hù)springboot版本號(hào),不單獨(dú)使用,和下面兩個(gè)插件一起用
apply plugin: 'io.spring.dependency-management'// 相當(dāng)于<dependencyManagement>版本管理
// 將配置信息加載進(jìn)聲明中.版本控制
dependencyManagement{
dependencies {
for(depJar in rootProject.ext.dependencies){
dependency depJar.value
}
}
imports {
// spring-cloud-dependencies
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudversion}"
// spring-cloud-alibaba-dependencies
mavenBom "com.alibaba.cloud:spring-cloud-alibaba-dependencies:${springCloudAlibabaVersion}"
}
}
//依賴(lài)的配置:設(shè)置通用的依賴(lài)
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine'
// spring-boot-starter
implementation 'org.springframework.boot:spring-boot-starter'
// spring-cloud-starter-alibaba-nacos-discovery
implementation 'com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery'
// spring-cloud-starter-alibaba-nacos-config
implementation 'com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-config'
// spring-cloud-alibaba-sentinel-gateway
implementation 'com.alibaba.cloud:spring-cloud-alibaba-sentinel-gateway'
}
//基本JDK配置sourceCompatibility = 1.8
sourceCompatibility = 1.8
targetCompatibility = 1.8
compileJava.options.encoding "UTF-8"
compileTestJava.options.encoding "UTF-8"
tasks.withType(JavaCompile).configureEach {
options.encoding = "UTF-8"
}
test {
useJUnitPlatform()
}
}
project("module01") {
description ("微服務(wù)模塊1")
apply plugin: 'java-library'//支持api
dependencies {
//lombok
api "org.projectlombok:lombok"
api "mysql:mysql-connector-java"
api "org.apache.commons:commons-lang3"
}
}
project("module02") {
description ("微服務(wù)模塊2")
apply plugin: 'java-library'//支持api
dependencies {
// mp持久化框架
implementation 'com.baomidou:mybatis-plus-boot-starter'
// druid-spring-boot-starter
implementation 'com.alibaba:druid-spring-boot-starter'
// mysql數(shù)據(jù)庫(kù)
implementation 'mysql:mysql-connector-java'
}
}
project("module03") {
description ("微服務(wù)模塊3")
dependencies {
// spring-boot-starter-web
implementation 'org.springframework.boot:spring-boot-starter-web'
//spring-boot-starter-test
testImplementation 'org.springframework.boot:spring-boot-starter-test'
// spring-boot-starter-aop
implementation 'org.springframework.boot:spring-boot-starter-aop'
//spring-boot-starter-data-redis
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
// commons工具類(lèi)
implementation 'org.apache.commons:commons-lang3'
}
}
到了這里,關(guān)于Gradle7.4安裝與基本使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!