Gradle7.4安装与基本使用
文章目录
- 一.前言
- 二.下载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-version=6.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 HashMap<String,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 都是本地子项目 module,log4j 是远程依赖。
编译时: B 用 1.4.2 版本的 log4j,C 用 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官网整合说明
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抽取公共配置, 编码,环境,镜像源
// 加载构建期需要的插件
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-library'apply plugin: 'org.springframework.boot' //维护springboot版本号,不单独使用,和下面两个插件一起用apply plugin: 'io.spring.dependency-management'// 相当于<dependencyManagement>版本管理//基本JDK配置sourceCompatibility = 1.8sourceCompatibility = 1.8targetCompatibility = 1.8compileJava.options.encoding "UTF-8"compileTestJava.options.encoding "UTF-8"tasks.withType(JavaCompile).configureEach {options.encoding = "UTF-8"}// SpringBoot Plugin生效的非常关键的设置// 主启动类位置bootJar {mainClass.set('org.vector.Main')}//依赖的配置:设置通用的依赖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'//支持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.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()}// 维护插件版本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-library'apply 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-api'testRuntimeOnly '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-8"compileTestJava.options.encoding "UTF-8"tasks.withType(JavaCompile).configureEach {options.encoding = "UTF-8"}test {useJUnitPlatform()}
}project("module01") {description ("微服务模块1")apply plugin: 'java-library'//支持apidependencies {//lombokapi "org.projectlombok:lombok"api "mysql:mysql-connector-java"api "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'}
}
相关文章:

Gradle7.4安装与基本使用
文章目录一.前言二.下载Gradle三.Gradle镜像源-全局级配置四.配置Gradle wrapper-项目级配置五.Gradle对测试的支持五.生命周期5.1 settings文件六.Gradle任务入门6.1 任务行为6.2 任务依赖方式七. Dependencies依赖引入7.1 依赖冲突及解决方案八.Gradle整合多模块SpringBoot九…...
[系统安全] 虚拟化安全之虚拟化概述
本文为笔者从零基础学习系统安全相关内容的笔记,如果您对系统安全、逆向分析等内容感兴趣或者想要了解一些内容,欢迎关注。本系列文章将会随着笔者在未来三年的读研过程中持续更新,由于笔者现阶段还处于初学阶段,不可避免参照复现各类书籍内容,如书籍作者认为侵权请告知,…...

如何从零开始系统的学习项目管理?
经常会有人问,项目管理到底应该学习一些什么?学习考证之后能得到什么价值? 以下我就总结一下内容 一,学习项目管理有用吗? 有效的项目管理带来的益处大致包括以下几个方面:更有效达成业务目标、满足相关…...
面试题-----
面试题---- 一.HTML 1.常用哪些浏览器进行测试,对应有哪些内核? ①IE------------------->Trident ②Chrome---------->以前是Webkit现在是Blink ③Firefox------------>Gecko ④Safari-------------->Webkit ⑤Opera--------------&…...

线材-电子线载流能力
今天来讲的是关于电子线的一个小知识,可能只做板子的工程师遇到此方面的问题会比较少,做整机的工程师则必然会遇到此方面问题,那就是线材问题。 下面主要说下电子线的过电流能力。(文末有工具下载)电子线(h…...

单变量回归问题
单变量回归问题 对于某房价问题,x为房屋大小,h即为预估房价,模型公式为: hθ(x)θ0θ1xh_{\theta}(x)\theta_{0}\theta_{1}x hθ(x)θ0θ1x 要利用训练集拟合该公式(主要是计算θ0、θ1\theta_{0}、\theta_{1}θ…...

ubuntu/linux系统知识(36)linux网卡命名规则
文章目录背景命名规范系统默认命名规则优势背景 很久以前Linux 操作系统的网卡设备的传统命名方式是 eth0、eth1、eth2等,属于biosdevname 命名规范。 服务器通常有多块网卡,有板载集成的,同时也有插在PCIe插槽的。Linux系统的命名原来是et…...

java的一些冷知识
接口并没有继承Object类首先接口是一种特殊的类,理由就是将其编译后是一个class文件大家都知道java类都继承自Object,但是接口其实是并没有继承Object类的 可以自己写代码测试: 获取接口类的class对象后遍历它的methods,可以发现是不存在Obje…...

java代理模式
代理模式 为什么要学习代理模式?因为这是SpringAOP的底层! 【SpringAOP和SpingMVC}】 代理模式的分类: 静态代理 动态代理 代理就像这里的中介,帮助你去做向房东租房,你不能直接解出房东,而房东和中介…...

JUC包:CountDownLatch源码+实例讲解
1 缘起 有一次听到同事谈及AQS时,我有很多点懵, 只知道入队和出队,CLH(Craig,Landin and Hagersten)锁,并不了解AQS的应用, 同时结合之前遇到的多线程等待应用场景,发现…...

Log4j2基本使用
文章目录1. Log4j2入门2. Log4j2配置3. Log4j2异步日志4. Log4j2的性能Apache Log4j 2是对Log4j的升级版,参考了logback的一些优秀的设计,并且修复了一些问题,因此带 来了一些重大的提升,主要有: 异常处理,…...
A2L在CAN FD总线的使用
文章目录 前言CAN时间参数BTL CyclesTime Quantum时间份额SWJ同步跳转宽度波特率计算采样点计算CAN FD的第二采样点SSP推荐配置A2L配置总结前言 A2L作为XCP标定协议的载体,包括了总线信息的定义。本文介绍如何将基于CAN总线的A2L扩展为支持CAN-FD的A2L CAN时间参数 在介绍配…...

Android JetPack之启动优化StartUp初始化组件的详解和使用
一、背景 先看一下Android系统架构图 在Android设备中,设备先通电(PowerManager),然后加载内核层,内核走完,开始检查硬件,以及为硬件提供的公开接口,然后进入到库的加载。库挂载后开…...

[11]云计算|简答题|案例分析|云交付|云部署|负载均衡器|时间戳
升级学校云系统我们学校要根据目前学生互联网在线学习、教师教学资源电子化、教学评价过程化精细化的需求,计划升级为云教学系统。请同学们根据学校发展实际考虑云交付模型包含哪些?云部署采用什么模型最合适?请具体说明。9月3日买电脑还是租…...
C++11/C++14:lambda表达式
概念 lambda表达式:是一种表达式,是源代码的组成部分闭包:是lambda表达式创建的运行期对象,根据不同的捕获模式,闭包会持有数据的副本或引用闭包类:用于实例化闭包的类,每个lambda表达式都会触…...

算法课堂-分治算法
分治算法 把一任务分成几部分(通常是两部分)来完成(或只完成一部分),从而实现整个任务的完成 或者你可以把递归理解为分治算法的一部分 因为递归就是把问题分解来解决问题 例子 称假币 最笨的方法:两两称…...

操作系统权限提升(十六)之绕过UAC提权-CVE-2019-1388 UAC提权
系列文章 操作系统权限提升(十二)之绕过UAC提权-Windows UAC概述 操作系统权限提升(十三)之绕过UAC提权-MSF和CS绕过UAC提权 操作系统权限提升(十四)之绕过UAC提权-基于白名单AutoElevate绕过UAC提权 操作系统权限提升(十五)之绕过UAC提权-基于白名单DLL劫持绕过UAC提权 注&a…...

实例9:四足机器人运动学正解平面RR单腿可视化
实例9:四足机器人正向运动学单腿可视化 实验目的 通过动手实践,搭建mini pupper四足机器人的腿部,掌握机器人单腿结构。通过理论学习,熟悉几何法、旋转矩阵法在运动学正解(FK)中的用处。通过编程实践&…...

堆的基本存储
一、概念及其介绍堆(Heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵完全二叉树的数组对象。堆满足下列性质:堆中某个节点的值总是不大于或不小于其父节点的值。堆总是一棵完全二叉树。二、适用说明堆是利用完全二叉树的结构来维护一组数…...
如何获取物体立体信息通过一个相机
大家都知道的3D 技术是通过双眼视觉差异 得到的 但是3D的深度并没有那么强 为什么眼睛看到的就那么强 这无法让我们相信这个视觉差理论是和人眼睛立体感是一个原理 这个如今3D 电影都在用的技术 是和真正的人眼立体感 不一样的 或者说是有瑕疵的 分析一下现在的立体感技术 是通…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

Vue ③-生命周期 || 脚手架
生命周期 思考:什么时候可以发送初始化渲染请求?(越早越好) 什么时候可以开始操作dom?(至少dom得渲染出来) Vue生命周期: 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...