入门的网课链接: 【尚硅谷】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多模块项目
- 父模块 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()
}
- 根路径 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
}