• 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()
    
    • 1
    • 2
    • 3
    • 4
    • 5

    文件集合

    FileCollection fileList = files(['src/xxx.txt','src/yyyy.txt'])
    
    • 1

    文件树

    使用文件树可以直接获取指定目录下的树结构中的所有文件,使用include或exclude方法进行包含或排除

    ConfigurableFileTree fileTreeObj =  fileTree('src/main')
    //对含有txt后缀的文件进行操作
    fileTreeObj.include("**/*.txt")
    //排除后缀txt的问价
    fileTreeObj.exclude("**/*.txt")
    
    • 1
    • 2
    • 3
    • 4
    • 5

    文件拷贝

    指定任务类型为Copy,使用from指定需要复制的目录或者文件,使用into指定拷贝的目标地址,同样我们可以使用include和exclude进行包含或排除

    task copyTask(type: Copy){
    	from 'src/main'
    	into 'D:/copyTest'
    }
    
    • 1
    • 2
    • 3
    • 4

    文件改名

    使用rename方法配合replace方法对文件进行改名

    task copyTask(type: Copy){
    	from 'src/main/zhangsan.txt'
    	rename{String fileName ->
    		fileName.replace('zhangsan','wangwu')
    	}
    	
    	into 'D:/copyTest'
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    归档文件

    通常一个项目会有很多的Jar包,我们希望把项目打包成一个WAR,ZIP 或 TAR包进行发布,这时我们就可以使用Zip,Tar,Jar,War和Ear任务来实现,不过它们的用法都一样,不同的地方只在修改type即可

    task toZip(type:Zip){
    	from 'src/main'
    	into 'build'
    	baseName = 'myZip'
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    读取压缩包

    使用zipTree进行读取,当然还可以使用tarTree读tar包,用jarTree读jar包

    FileTree zip = zipTree('myZip.zip')
    
    • 1

    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'])
    
    • 1
    • 2

    项目依赖实例

    同样是使用implementation,后面跟Project
    依赖的项目必须要在settings.gradle中引入

    implementation project(':kid1')
    
    • 1

    直接依赖实例

    语法:implementation 依赖的类型+依赖的组名+依赖的名称+依赖的版本号

    
    implementation group: 'mysql', name: 'mysql-connector-java', version: '8.0.30'
    
    
    • 1
    • 2
    • 3

    依赖的类型

    类型说明
    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'
    }
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    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")
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    查看依赖冲突

    使用package org.gradle.api.artifacts包下的Configuration

    这时候遇到冲突的jar包就会报错!

    configurations.all(){
        Configuration config ->
            config.resolutionStrategy.failOnVersionConflict()
    }
    
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    计算机网络与技术——概述
    美团后端开发一面(40min)
    C03-【计算机二级】Excel操作题(2)全国人口普查数据的统计分析
    search_everything文件搜索引擎的测试用例
    C#餐饮收银系统
    第十三章 配置任务管理器电子邮件设置
    LeetCode第 310 场周赛
    图书管理系统路径不对
    设计模式学习(十九):访问者模式
    数据结构--哈希表,哈希函数(或者散列表、散列函数)
  • 原文地址:https://blog.csdn.net/qq_51553982/article/details/126095104