Gradle7.4安装与基本使用

news2024/11/15 8:44:24

文章目录

    • 一.前言
    • 二.下载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.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生效的非常关键的设置
    // 主启动类位置
    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'//支持api
    dependencies {
        compileOnly group: 'org.projectlombok', name: 'lombok', version: lombokVerison
    }
}
project("module02") {
    apply plugin: 'java-library'//支持api
    dependencies {
        // 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-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工具类
        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-dependencies
            mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudversion}"
            // spring-cloud-alibaba-dependencies
            mavenBom "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-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 ("微服务模块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 ("微服务模块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数据库
        implementation 'mysql:mysql-connector-java'
    }
}

project("module03") {
    description ("微服务模块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工具类
        implementation 'org.apache.commons:commons-lang3'
    }
}



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/372679.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NLP复习大纲

第一章&#xff1a;概述 1. 什么是自然语言处理&#xff1f; 计算机具备人类的听、说、读、写、译、问、答、搜索、摘要、对话和聊天等能力 知识和常识进行推理和决策 支持客服、诊断、法律、教学等场景 2. 自然语言处理的主要任务有哪些&#xff1f; 分析、理解、转换、…

要理解网络,其实不就是理解这三张表吗

我们如果要理解数据是如果在网络世界中穿梭的&#xff0c;那其实只要了解其中的三张表就可以了。这三张表分别为路由表、转发表、ARP 表。 假设我们用聊天工具聊天的时候&#xff0c;我在北京&#xff0c;你在广东&#xff0c;当我给你发送一条消息的时候。搭载这这条消息的数据…

带你沉浸式体验删库跑路

前言:学习的过程比较枯燥,后面会记录一些比较有意思的东西&#xff0c;比如程序员之间流传的删库跑路的梗,当然本次测试是在虚拟机上进行的并进行了快照保护,所以其实没太大问题。首先得要有一个虚拟机要有一个linux iso文件装在虚拟机上以上两点不是本文重点,如果有需要可以私…

CLIP论文阅读

Learning Transferable Visual Models From Natural Language Supervision 利用自然语言的监督信号学习可迁移的视觉模型 概述 迁移学习方式就是先在一个较大规模的数据集如ImageNet上预训练&#xff0c;然后在具体的下游任务上再进行微调。这里的预训练是基于有监督训练的&am…

排序基础之插入排序

目录 前言 一、什么是插入排序 二、实现插入排序 三、插入排序优化 四、插入排序的特性 前言 上一篇中我们说到了《排序基础之选择排序》&#xff0c;这一篇我们来学习一下排序算法中的另一种基础排序算法——插入排序。 一、什么是插入排序 简单来说就是&#xff1a;每…

break与continue关键字

1.概述 不知道大家有没有这样一种感受哈&#xff0c;有的时候容易混淆break语句和continue语句的用法&#xff0c;总是模棱两可&#xff0c;不敢确定自己是否使用正确了。正好&#xff0c;我们本篇的重点就是break和continue关键字的用法。 2.使用场景 Java中为啥会诞生break…

js——原型和原型链

最近看了很多面试题&#xff0c;看到这个js原型是常考点&#xff0c;于是&#xff0c;我总结了一些该方面的知识点分享给大家&#xff0c;其实原型就是那么一回事&#xff0c;搞明白了就没啥了。结果如下图所示&#xff1a;原型原型又可分为显式原型和隐式原型1.1显式原型显式原…

Linux C代码获取线程ID

Linux C代码获取线程ID gettid可以获取线程id,但是通过man gettid可以看到下面这两句 也就是说glibc没有为这个gettid封装系统调用&#xff0c;需要使用syscall。 #define _GNU_SOURCE#include <unistd.h>#include <sys/syscall.h>#include <sys/types.h>ti…

自动化测试 selenium常用操作

最简单的代码实例import org.openqa.selenium.By; import org.openqa.selenium.chrome.ChromeDriver;public class AutoTestDemo1 {//浏览器自动搜索,暂停是为了能看到&#xff0c;要不访问太快public void testKunKun() throws InterruptedException {//打开浏览器ChromeDrive…

【软件工程】课程作业(三道题目:需求分析、概要设计、详细设计、软件测试)

文章目录&#xff1a;故事的开头总是极尽温柔&#xff0c;故事会一直温柔……&#x1f49c;一、你怎么理解需求分析&#xff1f;1、需求分析的定义&#xff1a;2、需求分析的重要性&#xff1a;3、需求分析的内容&#xff1a;4、基于系统分析的方法分类&#xff1a;5、需求分析…

Java static关键字(重新认识main方法)

static关键字一、static修饰成员的特点二、static什么时候使用三、static注意事项四、重新认识main方法static 是静态的意思&#xff0c;可以修饰成员变量&#xff0c;也可以修饰成员方法 一、static修饰成员的特点 被其修饰的成员, 被该类的所有对象所共享多了一种调用方式, 可…

Vue(6)

文章目录1. 自定义指令1.1 函数式1.2 对象式1.3 自定义指令常见坑1.4 创建全局指令2. 生命周期2.1 引出生命周期2.2 分析生命周期2.3 总结3. 组件3.1 认识组件3.2 使用组件 (非单文件组件)3.3 全局组件3.4 组件的几个注意点3.5 组件的嵌套3.6 VueComponent 构造函数3.7 一个重要…

openresty学习笔记

openresty 简介 openresty 是一个基于 nginx 与 lua 的高性能 web 平台&#xff0c;其内部 集成了大量精良的 lua 库、第三方模块以及大数的依赖项。用于 方便搭建能够处理超高并发、扩展性极高的动态 web 应用、 web 服务和动态网关。 openresty 通过汇聚各种设计精良的 ngi…

LearnOpenGL-入门-纹理

本人刚学OpenGL不久且自学&#xff0c;文中定有代码、术语等错误&#xff0c;欢迎指正 我写的项目地址&#xff1a;https://github.com/liujianjie/LearnOpenGLProject LearnOpenGL中文官网&#xff1a;https://learnopengl-cn.github.io/ 文章目录纹理纹理环绕方式纹理过滤多…

3.抽象工厂模式(Abstract Factory)

与工厂模式对比 工厂模式 工厂模式是类创建模式。在工厂模式中&#xff0c;只需要生产同一种产品&#xff0c;只不过是生产厂家不同。 所以产品类的设计&#xff1a; 抽象的产品类Product具体的产品类Product_A&#xff0c;Product_B, Product_C, Product_D…… 工厂的设计…

BFC的含义以及应用

什么是BFC? BFC全称是Block Formatting context&#xff0c;翻译过来就是块级格式化上下文。简单来说&#xff0c;BFC是一个完全独立的空间。让空间里的子元素不会影响到外面的布局。&#x1f603;&#x1f603;&#x1f603; 如何触发BFC呢&#xff1f; mdn给了如下方式&a…

HMM-理论补充

目录 一.隐马尔科夫模型 二.HMM定义 三.隐马尔科夫模型的贝叶斯网络 四.HMM的确定 五.HMM的参数 六.HMM的参数总结 七.HMM的两个基本性质 1.齐次假设&#xff1a; 2.观测独立性假设&#xff1a; 八.HMM举例 九.HMM的3个基本问题 十.概率计算问题 1.直接算法 2.前向…

C语言学习笔记——程序环境和预处理

目录 前言 一、程序环境 1. 翻译环境 1.1 主要过程 1.2 编译过程 2. 运行环境 二、预处理 1. 预定义符号 2. #define 2.1 #define定义标识符 2.2 #define定义宏 2.3 命名约定和移除定义 3. 条件编译 4. 文件包含 结束语 前言 每次我们写完代码运行的时候都…

刷题28-有效的变位词

32-有效的变位词 解题思路&#xff1a; 注意变位词的条件&#xff0c;当两个字符串完全相等或者长度不等时&#xff0c;就不是变位词。 把字符串中的字符映射成整型数组&#xff0c;统计每个字符出现的次数 注意数组怎么初始化&#xff1a; int [] s1new int[26]代码如下&a…

C语言数据结构(一)—— 数据结构理论、线性表【动态数组、链表(企业版单向链表)】

数据结构理论1.1 数据数据&#xff1a;是描述客观事物的符号&#xff0c;是计算机中可以操作的对象&#xff0c;是能被计算机识别&#xff0c;并输入给计算机处理的符号集合。数据不仅仅包括整型、实型等数值类型&#xff0c;还包括字符及声音、图像、视频等非数值类型。1.2数据…