我是靠谱客的博主 俊秀黑裤,最近开发中收集的这篇文章主要介绍Gradle系列——Gradle文件操作,Gradle依赖(基于Gradle文档7.5)day3-1Gradle文件操作Gradle依赖,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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的依赖
在这里插入图片描述
共有三种依赖方式

  1. 本地依赖:依赖于本地的jar包,可以用文件集合或文件树进行指定
  2. 项目依赖:依赖某个project,即一个工程依赖另一个工程
  3. 直接依赖:当项目需要某些依赖的时候直接使用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
providedCompilewar插件提供支持,编译、测试阶段代码需要依赖此类jar包,而运行阶段容器已经提供了相应的支持,所以无需将这些文件打入到war包中了;例如servlet-api.jar、jsp.api.jar
compile编译范围依赖在所有的classpath.中可用,同时它们也会被打包。在gradle 7.0已经移除
runtimeruntime依赖在运行和测试系统的时候需要,在编译的时候不需要,比如mysgl驱动包。在gradle 7.0已经移除
apijava-library插件提供支持,这些依赖项可以传递性地导出给使用者,用于编译时和运行时。取代老版本中被移除的compile
compileOnlyapijava-library插件提供支持,在声明模块和使用者在编译时需要的依赖项,但在运行时不需要。

引入依赖插件

想要使用依赖必须要在build.gradle中引入对应的插件,然后刷新gradle

plugins {
id 'java',
id 'java-library'
}

在这里插入图片描述

api和implementation的区别

apiimplementation
编译时能进行依赖传递,底层变,全部都要变、编译速度慢不能进行依赖传递,底层变,不用全部都要变、编译速度快
运行时运行时会加载,所有模块的class都要被加载运行时会加载,所有模块的class都要被加载
应用场景适用于多模块依赖,避免重复依赖模块多数情况下使用implementation

依赖冲突

当编译时发现同一个依赖有多个不同的版本,导致的无法确定使用哪个依赖的问题称为依赖冲突

在gradle中默认会处理使用最新版本的jar包
意思是若你使用了Junit5.1和Junit 5.4,这时gradle就会直接使用Junit5.4

若你使用excludetransitive(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依赖所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部