泉州市住房与城乡建设网站,合肥品牌网站建设,美妆网站建设规划,html5个人网站模板文章目录一.前言二.下载Gradle三.Gradle镜像源-全局级配置四.配置Gradle wrapper-项目级配置五.Gradle对测试的支持五.生命周期5.1 settings文件六.Gradle任务入门6.1 任务行为6.2 任务依赖方式七. Dependencies依赖引入7.1 依赖冲突及解决方案八.Gradle整合多模块SpringBoot九…
文章目录一.前言二.下载Gradle三.Gradle镜像源-全局级配置四.配置Gradle wrapper-项目级配置五.Gradle对测试的支持五.生命周期5.1 settings文件六.Gradle任务入门6.1 任务行为6.2 任务依赖方式七. Dependencies依赖引入7.1 依赖冲突及解决方案八.Gradle整合多模块SpringBoot九. Gradle整合微服务SpringCloud一.前言
gradle有突出的版本不兼容问题.因此要注意SpringBoot对Gradle的要求,以及IDEA对Gradle的要求. 在IDEA的plugins/lib/gradle中规定了gradle的最大版本号. 在2022.2.1中是6.7 在2022.3.2中是7.4. 其余自行查看该位置的版本控制.不过idea规定的版本号可以更改. 查看SpringBoot与Gradle的兼容性 二.下载Gradle
Gradle官网地址 下载完整版解压后 系统变量配置Gradle仓库 键必须为GRADLE_USER_HOME 系统变量配置Gradle全局系统变量 gradle的bin目录 验证 gradle -v 三.Gradle镜像源-全局级配置
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-项目级配置 解决项目在多台电脑开发时,Gradle环境不一致,idea不兼容等问题.
Gradle指令调用本地的gradle脚本.而在项目中应当运行gradlew才是调用项目中的wrapper脚本 gradlew wrapper --gradle-version6.7当执行
gradlew.bat classes
gradlew.bat test
gradlew.bat build等,会下载gradle相关内容
五.Gradle对测试的支持 test{useJUnitPlatform() // 支持对junit5测试
}五.生命周期
Gradle项目的生命周期分为三大阶段: Initialization -Configuration - Execution.每个阶段都有自己的职责,具体如下图所示: Initialization 只执行一次初始化脚本. Configuration 先执行加载父脚本,再是子脚本,再是孙子脚本
5.1 settings文件 六.Gradle任务入门
6.1 任务行为
def map new HashMapString,Object();
//action属性可以设置为闭包,设置task自身的行为
map.put(action,{println task one..})task (map,task1){// 任务的配置段:在配置阶段执行println 最先执行// 任务的行为:在执行阶段执行doFirst会在doLast执行之前执行doFirst {println task1 doFirst}doLast {println task1 doLast}
}task.doFirst {println task1 doFirst outer
}task.doLast {println task1 doLast outer
}6.2 任务依赖方式 七. Dependencies依赖引入 除非涉及到多模块依赖为了避免重复依赖咱们会使用api,其它情况我们优先选择implementation拥有大量的api 依赖项会显著增加构建时间。
7.1 依赖冲突及解决方案
依赖冲突是指 “在编译过程中, 如果存在某个依赖的多个版本, 构建系统应该选择哪个进行构建的问题”,如下所示: A、B、C 都是本地子项目 modulelog4j 是远程依赖。 编译时 B 用 1.4.2 版本的 log4jC 用 2.2.4 版本的 log4j,B 和 C 之间没有冲突 打包时 只能有一个版本的代码最终打包进最终的A对应的jar |war包对于 Gradle 来说这里就有冲突了
默认下Gradle 会使用最新版本的 jar 包【考虑到新版本的 jar 包一般都是向下兼容的】实际开发中还是建议使用官方自带的这种解决方案。当然除此之外Gradle 也为我们提供了一系列的解决依赖冲突的方法: exclude 移除一个依赖不允许依赖传递强制使用某个版本。 ● Exclude 排除某个依赖
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){
//排除某一个库(slf4j)依赖:如下三种写法都行
exclude group: org.slf4j exclude module: slf4j-api
exclude group: org.slf4j,module: slf4j-api
}
//排除之后,使用手动的引入即可。implementation org.slf4j:slf4j-api:1.4.0
}● 不允许依赖传递 在添加依赖项时,如果设置 transitive 为false,表示关闭依赖传递。即内部的所有依赖将不会添加到编译和运行时的类路径。
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){
//不允许依赖传递一般不用
transitive(false)
}
//排除之后,使用手动的引入即可implementation org.slf4j:slf4j-api:1.4.0
}● 强制使用某个版本
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)
//强制使用某个版本!!【官方建议使用这种方式】
implementation(org.slf4j:slf4j-api:1.4.0!!)
//这种效果和上面那种一样,强制指定某个版本implementation(org.slf4j:slf4j-api:1.4.0){
version{
strictly(1.4.0)
}
}
}八.Gradle整合多模块SpringBoot
SpringBoot官网整合说明
distributionBaseGRADLE_USER_HOME
distributionPathwrapper/dists
distributionUrlhttps\://services.gradle.org/distributions/gradle-7.5-bin.zip
zipStoreBaseGRADLE_USER_HOME
zipStorePathwrapper/dists模块聚合./settings.gradle
新建.gradle后缀的文件做版本管理
config.gradle
ext {lombokVerison 1.18.24mybatisPlusVersion 3.5.2druidVersion 1.2.8mysqlVersion 8.0.32commonsVersion 3.12.0
}./build.gradle抽取公共配置, 编码,环境,镜像源
// 加载构建期需要的插件
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()}// 维护插件版本dependencies {classpath(org.springframework.boot:spring-boot-gradle-plugin:2.6.3)}
}
// 导入插件
plugins {id java-library
}group com.vector
version 1.0-SNAPSHOT// 读取gradle版本配置
apply from: config.gradle// 对所有子模块做统一管理
subprojects {//添加插件 目前Gradle版本不支持在allprojects下声明plugins使用的是旧的写法apply plugin: java-libraryapply plugin: org.springframework.boot //维护springboot版本号,不单独使用,和下面两个插件一起用apply plugin: io.spring.dependency-management// 相当于dependencyManagement版本管理//基本JDK配置sourceCompatibility 1.8sourceCompatibility 1.8targetCompatibility 1.8compileJava.options.encoding UTF-8compileTestJava.options.encoding UTF-8tasks.withType(JavaCompile).configureEach {options.encoding UTF-8}// SpringBoot Plugin生效的非常关键的设置// 主启动类位置bootJar {mainClass.set(org.vector.Main)}//依赖的配置:设置通用的依赖dependencies {testImplementation org.junit.jupiter:junit-jupiter-apitestRuntimeOnly org.junit.jupiter:junit-jupiter-enginecompileOnly group: org.projectlombok, name: lombok, version: lombokVerison}test {useJUnitPlatform()}
}project(module01) {apply plugin: java-library//支持apidependencies {compileOnly group: org.projectlombok, name: lombok, version: lombokVerison}
}
project(module02) {apply plugin: java-library//支持apidependencies {// implementation不会进行依赖传递. api可以进行依赖传递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数据库implementation group: mysql, name: mysql-connector-java, version: mysqlVersion}
}project(module03) {dependencies {// 不需要在继续依赖传递implementation project(:module02)// spring-boot-starter-webimplementation org.springframework.boot:spring-boot-starter-web//spring-boot-starter-testtestImplementation org.springframework.boot:spring-boot-starter-test// spring-boot-starter-aopimplementation org.springframework.boot:spring-boot-starter-aop//spring-boot-starter-data-redisimplementation org.springframework.boot:spring-boot-starter-data-redis// commons工具类implementation group: org.apache.commons, name: commons-lang3, version: commonsVersion}
} 那么可以自行探寻更优雅的写法.
九. Gradle整合微服务SpringCloud
项目结构 创建version.gradle
ext {version [lombokVerison : 1.18.24,mybatisPlusVersion: 3.5.2,druidVersion : 1.2.8,mysqlVersion : 8.0.32,commonsVersion : 3.12.0]// 公共依赖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
description 微服务父工程//构建Gradle脚本自身需要的资源可以声明的资源包括依赖项、第三方插件、maven仓库地址等。
buildscript {ext {springBootVersion 2.6.3springCloudversion 2021.0.1springCloudAlibabaVersion 2021.1springBootGradlePlugin 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()}// 维护插件版本dependencies {classpath(org.springframework.boot:spring-boot-gradle-plugin:${springBootGradlePlugin})}
}group com.vector
version 1.0-SNAPSHOT// 读取gradle版本配置
apply from: version.gradle// 对所有子模块做统一管理
subprojects {//添加插件 目前Gradle版本不支持在allprojects下声明plugins使用的是旧的写法apply plugin: java-libraryapply plugin: org.springframework.boot //维护springboot版本号,不单独使用,和下面两个插件一起用apply plugin: io.spring.dependency-management// 相当于dependencyManagement版本管理// 将配置信息加载进声明中.版本控制dependencyManagement{dependencies {for(depJar in rootProject.ext.dependencies){dependency depJar.value}}imports {// spring-cloud-dependenciesmavenBom org.springframework.cloud:spring-cloud-dependencies:${springCloudversion}// spring-cloud-alibaba-dependenciesmavenBom com.alibaba.cloud:spring-cloud-alibaba-dependencies:${springCloudAlibabaVersion}}}//依赖的配置:设置通用的依赖dependencies {testImplementation org.junit.jupiter:junit-jupiter-apitestRuntimeOnly org.junit.jupiter:junit-jupiter-engine// spring-boot-starterimplementation org.springframework.boot:spring-boot-starter// spring-cloud-starter-alibaba-nacos-discoveryimplementation com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery// spring-cloud-starter-alibaba-nacos-configimplementation com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-config// spring-cloud-alibaba-sentinel-gatewayimplementation com.alibaba.cloud:spring-cloud-alibaba-sentinel-gateway}//基本JDK配置sourceCompatibility 1.8sourceCompatibility 1.8targetCompatibility 1.8compileJava.options.encoding UTF-8compileTestJava.options.encoding UTF-8tasks.withType(JavaCompile).configureEach {options.encoding UTF-8}test {useJUnitPlatform()}
}project(module01) {description (微服务模块1)apply plugin: java-library//支持apidependencies {//lombokapi org.projectlombok:lombokapi mysql:mysql-connector-javaapi org.apache.commons:commons-lang3}
}
project(module02) {description (微服务模块2)apply plugin: java-library//支持apidependencies {// mp持久化框架implementation com.baomidou:mybatis-plus-boot-starter// druid-spring-boot-starterimplementation com.alibaba:druid-spring-boot-starter// mysql数据库implementation mysql:mysql-connector-java}
}project(module03) {description (微服务模块3)dependencies {// spring-boot-starter-webimplementation org.springframework.boot:spring-boot-starter-web//spring-boot-starter-testtestImplementation org.springframework.boot:spring-boot-starter-test// spring-boot-starter-aopimplementation org.springframework.boot:spring-boot-starter-aop//spring-boot-starter-data-redisimplementation org.springframework.boot:spring-boot-starter-data-redis// commons工具类implementation org.apache.commons:commons-lang3}
}