Gradle 入门

入门的网课链接: 【尚硅谷】Gradle教程入门到进阶

一、遇到的问题

1.多模块版本管理问题

gradle 依赖规则
在 gradle 中主要有以下两种依赖类型

在这里插入图片描述

implementation 'org.springframework.boot:spring-boot-starter'

api 'org.springframework.boot:spring-boot-starter'

举一个例子:a->b->c,其中 -> 表示依赖

  • api: 当你使用 api 来声明依赖时,依赖的库会被暴露给使用该模块的其他模块。这意味着,如果模块 A 使用 api 引入模块 B,而模块 B 又使用 api 引入模块 C,那么模块 A 可以直接访问模块 C 的公共 API。

  • implementation: 当你使用 implementation 来声明依赖时,依赖的库不会被暴露给使用该模块的其他模块。也就是说,如果模块 A 使用 implementation 引入模块 B,模块 A 将无法直接访问模块 C(如果 B 依赖于 C)。

而我们用的一般都是 implementation的方式,这就导致我们没法像在 Maven 中通过父模块使用<dependencyManagement>标签来统一管理子模块的包版本。

解决方法
在工程根目录新建一个version.gradle文件,然后把相关依赖全部丢进去
在这里插入图片描述

dependencies {   
    implementation 'com.baomidou:mybatis-plus-boot-starter:3.5.7'  
    implementation 'org.projectlombok:lombok:1.18.34'
    ...
}

子模块的build.gradle文件引入

apply from: "$rootDir/version.gradle"

这样就能统一依赖的版本了

二、通用配置

1. 单个 springboot 项目配置

buildscript {  
    repositories {  
        maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }  
    }    dependencies {  
        // 统一管理plugins中两个插件的版本,避免分别指定  
        classpath 'org.springframework.boot:spring-boot-gradle-plugin:3.0.0'  
    }  
}
plugins {  
    id 'java'  
//    id 'org.springframework.boot' version '3.0.0'  
//    id 'io.spring.dependency-management' version '1.0.13.RELEASE'  
}  
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
  
allprojects {  
    repositories {  
        maven {  
            setUrl("https://maven.aliyun.com/repository/public/")  
        }  
        maven {  
            setUrl("https://maven.aliyun.com/repository/gradle-plugin/")  
        }  
        maven {  
            setUrl("https://maven.aliyun.com/repository/central/")  
        }  
    }    tasks.withType(JavaCompile).tap {  
        configureEach {  
            options.encoding = "utf-8"  
            sourceCompatibility = JavaVersion.VERSION_17.toString()  
            targetCompatibility = JavaVersion.VERSION_17.toString()  
        }  
    }}  
  
subprojects {  
    apply plugin: "java"  
  
    tasks.withType(Test) {  
        useJUnitPlatform()  
    }  
}  
  
group = 'com.it'  
version = '1.0-SNAPSHOT'  
  
dependencies {  
    implementation 'org.springframework.boot:spring-boot-starter'  
    implementation 'org.springframework.boot:spring-boot-starter-web'  
    implementation 'org.springframework.boot:spring-boot-starter-test'  
    implementation 'mysql:mysql-connector-java'  
    implementation 'com.alibaba:druid-spring-boot-3-starter:1.2.23'  
    implementation 'com.baomidou:mybatis-plus-boot-starter:3.5.7'  
  
    implementation 'org.projectlombok:lombok:1.18.34'  
}  
  
tasks.bootJar {  
    enabled = false  
}  
  
tasks.jar {  
    enabled = true  
}  
  
test {  
    useJUnitPlatform()  
}  
  
//下面我们配置,当Gradle构建遇到依赖冲突时,就立即构建失败  
configurations.configureEach {  
    Configuration configuration ->  
        //当遇到版本冲突时直接构建失败  
        configuration.resolutionStrategy.failOnVersionConflict()  
}

2.springCloud多模块项目

  1. 父模块 build.gradle 配置
// 不能放在version.gradle中,可能是因为执行顺序  
buildscript {  
    repositories {  
        maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }  
    }    dependencies {  
        // 统一管理plugins中两个插件的版本,避免分别指定  
        classpath 'org.springframework.boot:spring-boot-gradle-plugin:3.0.0'  
    }  
}  
  
allprojects {  
    repositories {  
        maven {  
            setUrl("https://maven.aliyun.com/repository/public/")  
        }  
        maven {  
            setUrl("https://maven.aliyun.com/repository/gradle-plugin/")  
        }  
        maven {  
            setUrl("https://maven.aliyun.com/repository/central/")  
        }  
    }    tasks.withType(JavaCompile).tap {  
        configureEach {  
            options.encoding = "utf-8"  
            sourceCompatibility = JavaVersion.VERSION_17.toString()  
            targetCompatibility = JavaVersion.VERSION_17.toString()  
        }  
    }}  
  
subprojects {  
    apply plugin: "java"  
    // 引入依赖文件  
    apply from: "$rootDir/version.gradle"  
  
    tasks.withType(Test) {  
        useJUnitPlatform()  
    }  
}  
  
group = 'com.it'  
version = '1.0-SNAPSHOT'  
  
//下面我们配置,当Gradle构建遇到依赖冲突时,就立即构建失败  
configurations.configureEach {  
    Configuration configuration ->  
        //当遇到版本冲突时直接构建失败  
        configuration.resolutionStrategy.failOnVersionConflict()  
}
  1. 根路径 version.gradle 配置
// 与buildScript对应  
apply plugin: 'org.springframework.boot'  
apply plugin: 'io.spring.dependency-management'  
  
dependencyManagement {  
    imports {  
        mavenBom 'org.springframework.cloud:spring-cloud-dependencies:2023.0.3'  
        mavenBom 'com.alibaba.cloud:spring-cloud-alibaba-dependencies:2023.0.1.2'  
    }  
}  
  
dependencies {  
    implementation 'org.springframework.boot:spring-boot-starter'  
    implementation 'org.springframework.boot:spring-boot-starter-web'  
    testImplementation  'org.springframework.boot:spring-boot-starter-test:3.2.0!!'  
    implementation 'mysql:mysql-connector-java:8.0.33'  
    implementation 'com.alibaba:druid-spring-boot-3-starter:1.2.23'  
//    implementation 'com.baomidou:mybatis-plus-boot-starter:3.5.7'  
    implementation 'com.baomidou:mybatis-plus-spring-boot3-starter:3.5.5'  
  
  
    implementation 'com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery'  
    implementation 'org.springframework.cloud:spring-cloud-starter-openfeign'  
    implementation 'org.springframework.cloud:spring-cloud-starter-loadbalancer'  
  
    implementation 'org.junit.jupiter:junit-jupiter-api'  
    compileOnly 'org.projectlombok:lombok:+'  
    annotationProcessor  'org.projectlombok:lombok:+'
}  
  
tasks.bootJar {  
    enabled = false  
}  
  
tasks.jar {  
    enabled = true  
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值