当前位置:网站首页>Gradle系列——Gradle文件操作,Gradle依赖(基于Gradle文档7.5)day3-1
Gradle系列——Gradle文件操作,Gradle依赖(基于Gradle文档7.5)day3-1
2022-08-01 19:14:00 【简明编程】
Gradle系列——Gradle文件操作,Gradle依赖(基于Gradle文档7.5)day3-1
Gradle文件操作
本地文件
使用Project.file(java.lang.Object)方法,通过指定文件的相对路径或绝对路径来对文件的操作,其中相对路径为相对当前project根project或者子project的目录。其实使用Project.file(java.lang.Object)方法创建的File对象就是Java中的 File对象,我们可以使用它就像在Java中使用一样。
File testFile = file("src/xxx.txt")
//创建文件
testFile.createNewFile()
//删除
testFile.delete()
文件集合
FileCollection fileList = files(['src/xxx.txt','src/yyyy.txt'])
文件树
使用文件树可以直接获取指定目录下的树结构中的所有文件,使用include或exclude方法进行包含或排除
ConfigurableFileTree fileTreeObj = fileTree('src/main')
//对含有txt后缀的文件进行操作
fileTreeObj.include("**/*.txt")
//排除后缀txt的问价
fileTreeObj.exclude("**/*.txt")
文件拷贝
指定任务类型为Copy,使用from指定需要复制的目录或者文件,使用into指定拷贝的目标地址,同样我们可以使用include和exclude进行包含或排除
task copyTask(type: Copy){
from 'src/main'
into 'D:/copyTest'
}
文件改名
使用rename方法配合replace方法对文件进行改名
task copyTask(type: Copy){
from 'src/main/zhangsan.txt'
rename{
String fileName ->
fileName.replace('zhangsan','wangwu')
}
into 'D:/copyTest'
}
归档文件
通常一个项目会有很多的Jar包,我们希望把项目打包成一个WAR,ZIP 或 TAR包进行发布,这时我们就可以使用Zip,Tar,Jar,War和Ear任务来实现,不过它们的用法都一样,不同的地方只在修改type即可
task toZip(type:Zip){
from 'src/main'
into 'build'
baseName = 'myZip'
}
读取压缩包
使用zipTree进行读取,当然还可以使用tarTree读tar包,用jarTree读jar包
FileTree zip = zipTree('myZip.zip')
Gradle依赖
依赖指定是build.gradle中的dependencies
如下就依赖了junit5的依赖
共有三种依赖方式
- 本地依赖:依赖于本地的jar包,可以用文件集合或文件树进行指定
- 项目依赖:依赖某个project,即一个工程依赖另一个工程
- 直接依赖:当项目需要某些依赖的时候直接使用maven仓库中的依赖坐标导入
本地依赖实例
使用implementation进行声明
implementation files('lib/mybatis-plus-spring-starter.jar','lib/mysql-connect-java.jar')
implementation fileTree('dir':'lib',includes: ['*.jar'])
项目依赖实例
同样是使用implementation,后面跟Project
依赖的项目必须要在settings.gradle中引入
implementation project(':kid1')
直接依赖实例
语法:implementation 依赖的类型+依赖的组名+依赖的名称+依赖的版本号
implementation group: 'mysql', name: 'mysql-connector-java', version: '8.0.30'
依赖的类型
| 类型 | 说明 |
|---|---|
| compileOnly | 由java插件提供,曾短暂的叫provided,后续版本已经改成了compileOnly,适用于编译期需要而不需要打包的情况 |
| runtimeOnly | 由java插件提供.只在运行期有效,编译时不需要,比如mvsg! 驱动包。,取代老版本中被移除的runtime |
| implementation | 由java插件提供,针对源码src/main目录 ,在编译、运行时都有效取代老版本中被移除的compile |
| testCompileOnly | 由java插件提供,用于编译测试的依赖项,运行时不需要 |
| testRuntimeOnly | 由java插件提供.只在测试运行时需要,而不是在测试编译时需要,取代老版本中被移除的testRuntime |
| testImplementation | 由java插件提供,针对测试代码src/test目录取代老版本中被移除的testCompile |
| providedCompile | war插件提供支持,编译、测试阶段代码需要依赖此类jar包,而运行阶段容器已经提供了相应的支持,所以无需将这些文件打入到war包中了;例如servlet-api.jar、jsp.api.jar |
| compile | 编译范围依赖在所有的classpath.中可用,同时它们也会被打包。在gradle 7.0已经移除 |
| runtime | runtime依赖在运行和测试系统的时候需要,在编译的时候不需要,比如mysgl驱动包。在gradle 7.0已经移除 |
| api | java-library插件提供支持,这些依赖项可以传递性地导出给使用者,用于编译时和运行时。取代老版本中被移除的compile |
| compileOnlyapi | java-library插件提供支持,在声明模块和使用者在编译时需要的依赖项,但在运行时不需要。 |
引入依赖插件
想要使用依赖必须要在build.gradle中引入对应的插件,然后刷新gradle
plugins {
id 'java',
id 'java-library'
}

api和implementation的区别
| api | implementation | |
|---|---|---|
| 编译时 | 能进行依赖传递,底层变,全部都要变、编译速度慢 | 不能进行依赖传递,底层变,不用全部都要变、编译速度快 |
| 运行时 | 运行时会加载,所有模块的class都要被加载 | 运行时会加载,所有模块的class都要被加载 |
| 应用场景 | 适用于多模块依赖,避免重复依赖模块 | 多数情况下使用implementation |
依赖冲突
当编译时发现同一个依赖有多个不同的版本,导致的无法确定使用哪个依赖的问题称为依赖冲突
在gradle中默认会处理使用最新版本的jar包
意思是若你使用了Junit5.1和Junit 5.4,这时gradle就会直接使用Junit5.4
若你使用exclude或transitive(true),也可以对不要的进行排除,但是推荐使用默认依赖最新版本的即可
若你想强制使用某个版本的jar包你可以使用!!或version进行指定
implementation 'mysql:mysql-connector-java:8.0.30!!'
implementation('mysql:mysql-connector-java:8.0.30'){
version{
strictly("8.0.30")
}
}
查看依赖冲突
使用package org.gradle.api.artifacts包下的Configuration
这时候遇到冲突的jar包就会报错!
configurations.all(){
Configuration config ->
config.resolutionStrategy.failOnVersionConflict()
}
边栏推荐
- 突破边界,华为存储的破壁之旅
- 【软考软件评测师】基于规则说明的测试技术下篇
- TestNG multiple xml for automated testing
- SQL function TO_DATE (2)
- 生命周期和作用域
- 文库网站建设源码分享
- [Neural Network] This article will take you to easily analyze the neural network (with an example of spoofing your girlfriend)
- 1个小时!从零制作一个! AI图片识别WEB应用!
- MLX90640 Infrared Thermal Imager Temperature Measurement Module Development Notes (Complete)
- 金鱼哥RHCA回忆录:CL210管理OPENSTACK网络--网络配置选项
猜你喜欢

XML配置

BN BatchNorm + BatchNorm的替代新方法KNConvNets

GZIPOutputStream 类源码分析
![[Neural Network] This article will take you to easily analyze the neural network (with an example of spoofing your girlfriend)](/img/2c/18ce72dfd0889d901ea0d95721ed19.png)
[Neural Network] This article will take you to easily analyze the neural network (with an example of spoofing your girlfriend)

Prometheus的Recording rules实践

Risc-v Process Attack

在Map传值与对象传值中模糊查询

Ha ha!A print function, quite good at playing!

#yyds干货盘点# 面试必刷TOP101: 链表中倒数最后k个结点

LeetCode 0152. Product Maximum Subarray: dp + Roll in Place
随机推荐
Flowable-based upp (unified process platform) running performance optimization
【1374. 生成每种字符都是奇数个的字符串】
Mobile Zero of Likou Brush Questions
Three solutions: npm WARN config global --global, --local are deprecated. Use --location=global instead.
modbus总线模块DAM-8082
Win11校园网无法连接怎么办?Win11连接不到校园网的解决方法
Map by value
A simple Flask PIN
Keras deep learning practice - traffic sign recognition
TestNG多个xml进行自动化测试
开源视界 | StreamNative 盛宇帆:和浪漫的人一起做最浪漫的事
Fuzzy query in Map pass-by-value and object pass-by-value
Win11怎么安装语音包?Win11语音包安装教程
Map传值
The solution to the vtk volume rendering code error (the code can run in vtk7, 8, 9), and the VTK dataset website
在全志V853开发板试编译QT测试
LeetCode 0152. Product Maximum Subarray: dp + Roll in Place
PanGu-Coder:函数级的代码生成模型
What should I do if the Win11 campus network cannot be connected?Win11 can't connect to campus network solution
kubernetes-部署nfs存储类