初探Gradle
目录
- 一.概述
- 二.优点
- 三.安装与配置
- 1. 官网下载
- 2. 配置环境变量
- 3. 检验
- 4. 配置国内镜像(可选)
- 5. IDEA配置
- 三.工程结构
- 四.生命周期
- 1.Initialization阶段
- 2.Configuration阶段
- 3.Execution阶段
- 五.Task
- 六.常用任务指令
- 七.引入依赖
- 1.本地依赖
- 2.项目依赖
- 3.直接依赖
- 八.依赖类型
- 九.插件
- 十.依赖冲突
一.概述
Java中主要有三大项目构建工具:Gradle、Maven和Ant,Gradle是继Maven之后的新一代构建工具,他采用基于Groovy的特定领域语言(DSL)作为脚本,相比通过XML来配置的传统构建工具(maven),最直观的感受就是脚本更加的简洁优雅
二.优点
- 多语言支持:Java、Groovy、Scala、C++都有良好的支持
- 跨平台支持:Gradle是基于JVM的,只要有JVM就可以让Gradle运行
- 脚本灵活性:Gradle使用的是Groovy或Kotlin语言作为脚本的编写语言,可以使用Groovy灵活的编写任务完成想要的任何事情
- 速度更快:Gradle有增量构建、构建缓存等概念,构建效率比Maven快些
三.安装与配置
1. 官网下载
进入官网https://gradle.org/releases/,点击binary-only进行下载,然后将下载好的压缩包解压到任意位置
2. 配置环境变量
新建一个名为GRADLE_HOME的变量,变量值->浏览目录选择Gradle根目录
配置Path->指定Gradle的bin目录
3. 检验
CMD窗口输入以下命令,如果出现版本号等信息,说明安装配置成功
gradle -v
4. 配置国内镜像(可选)
同Maven一样,Gradle也可以配置国内镜像来提升下载速度,我们打开用户目录的.gradle文件夹,创建一个init.gradle文件
allprojects {repositories {maven{ url 'http://maven.aliyun.com/repository/public/'}mavenCentral()}
}
5. IDEA配置
三.工程结构
四.生命周期
Gradle的生命周期分为三个阶段,Initialization->Configuration->Execution
1.Initialization阶段
执行init.gradle和setting.gradle,init gradle文件会在每个项目build之前被调用,完成一些初始化的操作,例如:
配置内部的仓库信息(如公司的maven仓库信息)
配置全局属性
配置用户名及密码信息
Setting.gradle决定哪些项目参与到构建中,为每个项目创建一个Project
2.Configuration阶段
执行build.gradle文件,顺序是先执行完所有父工程的,再执行子工程的,根据脚本代码创建对应的Task,最终根据所有Task生成有向无环图
3.Execution阶段
根据Configuration阶段的有向无环图,按顺序执行Task
五.Task
Gradle执行的最小单元是Task,Task包含三部分的行为,分别是doFirst、doSelf、doLast
Action的执行顺序:
下面是简单的Task演示
task("task1"){print("Configuration阶段执行")doFirst {print("Execution阶段执行,且在doLast前执行")}doLast {print("Execution阶段执行")}
}
编写Task1
执行Task1
六.常用任务指令
- gradle init: 初始化gradle项目
- gradle build: 构建项目,包括编译、测试、打包等操作,同步生成build文件夹
- gradle clean: 清除当前项目的build文件夹
- gradle bootjar: 生成jar包
- gradle projects: 展示项目层级
- gradle dependencies: 树形展示项目依赖
七.引入依赖
Gradle有三种引入依赖的方式,分别是本地依赖、项目依赖和直接依赖,都是在build.gradle文件中引入
1.本地依赖
- 文件集合方式指定
implementation files("lib/fastjson-1.2.83.jar", "lib/commons-io-2.11.0.jar")
- 文件树方式指定
implementation fileTree('dir':'lib', includes: ['fastjson*.jar'], excludes: ['commons-io-2.11.0.jar'])
2.项目依赖
implementation project(':subProject1')
subProject1必须在settings.gradle中声明
subProject1模块通过api引入的依赖就可以传导到rootProject工程(implementation引入的不支持),rootProject就可以直接使用gson依赖了
3.直接依赖
声明格式为 依赖的类型 依赖的组名,依赖的名称,依赖的版本号
implementation group:'com.google.code.gson',name:'gson',version:'2.8.5'
上述可以简写为
implementation 'com.google.code.gson:gson:2.8.5'
八.依赖类型
依赖类型 | 说明 |
---|---|
compileOnly | java插件提供,适用于仅编译器需要而无需打包的情况,取代老版本的compile |
runtimeOnly | java插件提供,仅运行期有效,编译时不需要,比如mysql驱动包,取代老版本的runtime |
implementation | java插件提供,针对src/main目录,在编译、运行时都有效 |
testCompileOnly | java插件提供,仅测试编译时有效,运行时不需要 |
testRuntimeOnly | jjava插件提供,只在测试运行时需要,编译时不需要 |
testImplementation | java插件提供,针对src/test目录,在编译、运行时都有效 |
providedCompile | war插件提供支持,编译、测试阶段代码需要,而运行阶段容器已经提供了相应的支持,所以无需打到war包中了,例如servlet-api.jar、jsp-api.jar |
api | java-library插件提供支持,可以传递性地导出给使用者,用于编译和运行时 |
compileOnlyApi | java-library插件提供支持,在声明的模块和使用者在编译时需要的依赖项,运行时不需要 |
api与implemention的区别
- api能进行依赖传导,下层变动,上层全部跟着变动,所以编译速度慢,适用于多模块依赖的情况,避免重复依赖
- implemention不能进行依赖传导,下层变动,上层不用全部变动,所以编译速度块,多数情况选择它
九.插件
在build.gradle文件中引入插件,不同的插件支持不同的依赖类型,java插件支持的,java-library插件都支持
十.依赖冲突
依赖冲突指的是如果存在某一依赖的多个版本, 最终只有一个版本的依赖能打包进jar /war包,对于Gradle来说就有冲突了
spring-boot-starter-test:2.7.9包含junit-jupiter:5.8.2版本的jar,同时我引入了junit-jupiter:5.9.0版本的jar
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.junit.jupiter:junit-jupiter:5.9.0'
下图中可以发现,Gradle默认会使用最新版本的 jar包(考虑到新版本的jar包一般都是向下兼容的),实际开发中也是建议使用官方自带的这种解决方案
同时Gradle还提供了一系列解决冲突的方法,例如exclude移除依赖、不允许依赖传递、强制使用某个版本
- exclude移除依赖
testImplementation('org.springframework.boot:spring-boot-starter-test'){exclude group:'org.junit.jupiter'// exclude module:'junit-jupiter'// exclude group:'org.junit.jupiter', module:'junit-jupiter'}
- 不允许依赖传递(不推荐使用)
testImplementation('org.springframework.boot:spring-boot-starter-test'){transitive(false)}
此时spring-boot-starter-test所引用的包将需要我们一个个手动去引入
- 强制使用某个版本(添加双感叹号)
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.junit.jupiter:junit-jupiter:5.9.0!!'
相关文章:

初探Gradle
目录一.概述二.优点三.安装与配置1. 官网下载2. 配置环境变量3. 检验4. 配置国内镜像(可选)5. IDEA配置三.工程结构四.生命周期1.Initialization阶段2.Configuration阶段3.Execution阶段五.Task六.常用任务指令七.引入依赖1.本地依赖2.项目依赖3.直接依赖八.依赖类型九.插件十.…...
国产数据库介绍
人大金仓 Kingbase 北京人大金仓信息技术股份有限公司于1999年由中共人民大学专家创立,自成立以来,始终立足自主研发,专注数据管理领域,先后承担了国家“863”、“核高基”等重大专项,研发出了具有国际先进水平的大型…...
Java OpenJudge-test3
目录 1:明明的随机数 2:合影效果 3:不重复的单词 4:和为给定数 5:字符串数组排序问题 6:字符串排序 7:求序列中的众数 1:明明的随机数 总时间限制: 1000ms 内存限制: 65536kB 描述 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性ÿ…...

蓝桥杯刷题冲刺 | 倒计时22天
作者:指针不指南吗 专栏:蓝桥杯倒计时冲刺 🐾马上就要蓝桥杯了,最后的这几天尤为重要,不可懈怠哦🐾 文章目录1.选数异或2.特殊年份1.选数异或 题目 链接: 选数异或 - 蓝桥云课 (lanqiao.cn) 给定…...

入行 5年,跳槽 3次,我终于摸透了软件测试这行(来自过来人的忠告)
目录 前言 第一年 第二年 第三年 第四年 作为过来人的一些忠告 前言 最近几年行业在如火如荼的发展壮大,以及其他传统公司都需要大批量的软件测试人员,但是20年的疫情导致大规模裁员,让人觉得行业寒冬已来,软件测试人员的职…...
开源时序数据库学习
计划学习使用QuestDB解决大数据日志存储场景。以下是常见引擎比较 比较项目 InfluxDB TimescaleDB OpenTSDB QuestDB 数据模型 Key-Value Relational Key-Value Relational 存储引擎 自主开发的TSI PostgreSQL扩展程序 Apache HBase 自主开发 查询语言 InfluxQ…...

字节测试工程师悄悄告诉我的软件测试、测试开发常用的测试策略与测试手段
目录 前言 测试策略的关注重点 测试策略主要内容 总体测试策略 初级版本测试策略 跟踪测试执行 版本质量评估 后续版本测试策略 发布质量评估 测试手段 前言 测试策略是指在特定环境约束之下,描述软件开发周期中关于测试原则、方法、方式的纲要ÿ…...
我常用的shell 进制转换工具
一、进制的一些基础知识 1. 二进制(binary) 二进制的取值是0和1; 前缀是 0b 2. 八进制(Octal) 八进制的取值是0-7;前缀是 O 3. 十进制(decimal) 十进制的取值是0-9;没有前缀 …...

手写vue(二)响应式实现
名词解释:vm:指Vue实例一、目标效果vue定义(1)新建vm时,可以通过一个data对象,或者data函数,其属性可以通过vm直接访问,而data对象可以通过vm._data获取(2)修…...
mysql数据库常问面试题
1、NOW()和CURRENT_DATE()有什么区别? NOW()命令用于显示当前年份,月份,日期,小时,分钟和秒。 CURRENT_DATE()仅显示当前年份,月份和日期。 2、CHAR和VARCHAR的区别? (1)…...

AI风暴 :文心一言 VS GPT-4
💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! 文心一言 VS GPT-4 文心一言:知识增强大语言模型百度全新一代知识增强大语言模型,文心大模型家族的新成员,能够与人对话互动&#…...

VR全景城市,用720全景树立城市形象,打造3D可视化智慧城市
随着城市化进程的加速,城市之间的竞争也日益激烈。城市管理者们需要寻求新的方式来提升城市的品牌形象和吸引力。在这个过程中,VR全景营销为城市提供了一种全新的营销手段,可以帮助提升城市的价值和吸引力。一、城市宣传新方式VR全景营销是一…...

javaweb窗口服务人员分析评价系统ssh
A)后台管理员模块:通过该功能模块,管理员可以修改自己的密码,并对管理员进行添加和删除操作。 B)注册用户模块:通过该功能模块,管理员可以查看注册用户的基本信息,对存在问题的用户进…...

树莓派Pico W无线开发板UDP协议MicroPython网络编程实践
树莓派Pico W无线开发板(简称Pico W)是树莓派基金会于2022年6月底推出的搭载无线通信芯片的树莓派Pico开发板。本文在介绍树莓派Pico W无线开发板接口信号和TCP/IP和UDP通信协议基础上,给出Pico W无线开发板的UDP协议MicroPython网络编程实例…...

跨域解决方案
跨域解决方案 1.跨域基本介绍 文档:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CORS 跨域问题是什么? 一句话:跨域指的是浏览器不能执行其他网站的脚本,它是由浏览器的同源策略造成的,是浏览器对 javascr…...
springboot的统一处理
在处理网络请求时,有一部分功能是需要抽出来统一处理的,与业务隔开。 登录校验 可以利用spring mvc的拦截器Interceptor,实现HandlerInterceptor接口即可。实现该接口后,会在把请求发给Controller之前进行拦截处理。 拦截器的实…...

C/C++每日一练(20230319)
目录 1. 反转链表 II 🌟🌟 2. 解码方法 🌟🌟 3. 擅长编码的小k 🌟🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 …...

GitHub 上有些什么好玩的项目?
前言 各个领域模块的都整理了一下,包含游戏、一些沙雕的工具、实用正经的工具以及一些相关的电商项目,希望他们可以给你学习的路上增加几分的乐趣,我们直接进入正题~ 游戏 1.吃豆人 一款经典的游戏开发案例,包括地图绘制、玩家控…...
蓝桥杯刷题第十二天
问题描述给定一个正整数 n ,请问 n 的十进制表示中末尾总共有几个 0 ?输入格式输入一行包含一个正整数 n。输出格式输出一个整数,表示答案。评测用例规模与约定对于所有评测用例,1 < n < 1000000000。运行限制最大运行时间&…...

开发也可以很快乐,让VSCode和CodeGPT带给你幸福感
CodeGPT 是一款 Visual Studio Code 扩展,可以通过官方的 OpenAI API 使用 GPT-3 (预训练生成式转换器) 模型,在多种编程语言中生成、解释、重构和文档化代码片段。CodeGPT 可用于各种任务,例如代码自动完成、生成和格式化。它还可以集成到代…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...

python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...

SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...