初探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 可用于各种任务,例如代码自动完成、生成和格式化。它还可以集成到代…...

【Linux】基本指令介绍
前言从今天开始,我们一起来学习Linux的相关知识,今天先来介绍怎么登录Linux,并且介绍一些Linux的基本指令。使用 XShell 远程登录 Linux很多同学的 Linux 启动进入图形化的桌面. 这个东西大家以后就可以忘记了. 以后的工作中 没有机会 使用图…...

JQuery介绍
文章目录一. JQuery介绍二. JQuery使用三. JQuery选择器四. JQuery选择集过滤五.JQuery选择集转移六. JQuery获取和操作标签内容七. JQuery获取和设置元素属性八. JQuery事件九.JQuery事件代理- 事件冒泡- 事件绑定的问题- 事件代理一. JQuery介绍 定义: jquery是JS的一个函数…...

Selenium基础篇之八大元素定位方式
文章目录前言一、如何进行元素定位?1.右击元素-检查2.F12-选择工具点击元素3.借助selenium IDE二、八大元素定位方式1.ID1.1 方法1.2 举例1.3 代码1.4 截图2.NAME2.1 方法2.2 举例2.3 代码2.4 截图3.CLASS_NAME3.1 方法3.2 举例3.3 代码3.4 截图4.TAG_NAME4.1 方法4…...

C语言的灵魂---指针(基础)
C语言灵魂指针1.什么是指针?2.指针的大小3.指针的分类3.1比较常规的指针类型3.2指针的解引用操作3.3野指针野指针的成因:4.指针运算4.1指针加减整数4.2指针-指针1.什么是指针? 这个问题我们通常解释为两种情况: 1.指针本质&#…...

带你一文透彻学习【PyTorch深度学习实践】分篇——线性模型 梯度下降
分享给大家一段我国著名作家、散文家史铁生先生的一段话: 把路想象的越是坎坷就越是害怕,把山想象的越是险峻就越会胆怯,把别人想象的越是优秀就越是不敢去接近。惯于这样想象的人,是天生谦卑的人。 --------史铁生《关于恐惧》 🎯作者主页:追光者♂🔥 �…...

Javascript如何截取含有表情的字符串
Javascript如何截取含有表情的字符串 一、说说背景 社区社交应用中,难免会有输入用户昵称的操作,如果用户老老实实的输入中文汉字或者英文字母,那当然没啥问题,我们能够轻松的处理字符串的截取,产品说按多少字符截取…...

【云原生】prometheus结合jmx exporter 的java agent模式采集tomcat监控实战
前言 大家好,我是沐风晓月,今天我们又来探讨一款使用prometheus监控tomcat的另外一种形式:Java agent模式。 如果你想使用http server模式,请参考:【云原生】prometheus结合jmx exporter 的http server模式采集tomca…...

深度学习应用技巧总结与pytorch框架下训练过程的记忆技巧
大家好,我是微学AI,今天给大家总结一下深度学习模型训练过程中的一些技巧总结,以及pytorch框架下训练过程的记忆技巧,很有用的干货,理解模型训练过程的步骤,让流程难懂,难记忆的过程变得简单&am…...

数字图像处理 基于OpenCV的一种简单的阴影校正的方法
一、简述 在很多工业场景,都是基于工业相机、或者结合显微镜进行拍照采样,以进行进一步的分析,通常情况下分析结果和图像的质量息息相关,我们这里讨论的主要是因光照不均衡而在图像边缘产生阴影的图像的校正。 1、亮度阴影 亮度阴影(光学上称为渐晕,Vignetting)就是我们…...

OpenHarmony之cJSON库使用介绍
一、前言 我们前面OpenHarmony设备配网 文章中,给大家提供的示例有使用cJSON解析和cJSON创建json数据的用法 那么有同学会提出疑问,我难道只能用cJSON库? 当然不是啊,你也可以用 json-parser、parson、jansson 等等三方库 回到正题…...