当前位置:网站首页>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()
}
边栏推荐
- How to query database configuration parameters in GBase 8c, such as datestyle.What function or syntax to use?
- mysql函数的作用有哪些
- LeetCode 0151. Reverse a string of words
- 重保特辑|筑牢第一道防线,云防火墙攻防演练最佳实践
- 力扣刷题之移动零
- Ha ha!A print function, quite good at playing!
- ClassID的计算中,&表示啥意思
- 【全民编程】《软件编程-讲课视频》【零基础入门到实战应用】
- 【pyqt5】自定义控件 实现能够保持长宽比地缩放子控件
- 【LeetCode】Day109-the longest palindrome string
猜你喜欢
随机推荐
Clip-on multimeter use method, how to measure the voltage, current, resistance?
2022,程序员应该如何找工作
ThreadLocal讲义
DAO开发教程【WEB3.0】
MySQL database - stored procedures and functions
如何记录分析你的炼丹流程—可视化神器Wandb使用笔记【1】
A simple Flask PIN
面试必问的HashCode技术内幕
The XML configuration
基于flowable的upp(统一流程平台)运行性能优化
短视频软件开发,Android开发,使用Kotlin实现WebView
【LeetCode】Day109-the longest palindrome string
通配符 SSL/TLS 证书
【蓝桥杯选拔赛真题47】Scratch潜艇游戏 少儿编程scratch蓝桥杯选拔赛真题讲解
explain each field introduction
BN BatchNorm + BatchNorm的替代新方法KNConvNets
选择合适的 DevOps 工具,从理解 DevOps 开始
C#/VB.NET Extract table from PDF
【综述专栏】IJCAI 2022 | 图结构学习最新综述:研究进展与未来展望
使用常见问题解答软件的好处有哪些?









