概述
Gradle系列——Gradle文件操作,Gradle依赖(基于Gradle文档7.5)day3-1
- Gradle文件操作
- 本地文件
- 文件集合
- 文件树
- 文件拷贝
- 文件改名
- 归档文件
- 读取压缩包
- Gradle依赖
- 本地依赖实例
- 项目依赖实例
- 直接依赖实例
- 依赖的类型
- 引入依赖插件
- api和implementation的区别
- 依赖冲突
- 查看依赖冲突
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()
}
最后
以上就是俊秀黑裤为你收集整理的Gradle系列——Gradle文件操作,Gradle依赖(基于Gradle文档7.5)day3-1Gradle文件操作Gradle依赖的全部内容,希望文章能够帮你解决Gradle系列——Gradle文件操作,Gradle依赖(基于Gradle文档7.5)day3-1Gradle文件操作Gradle依赖所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复