Gradle系列——Gradle文件操作,Gradle依赖(基于Gradle文档7.5)day3-1

news/2024/5/20 4:03:33 标签: java, gradle, jvm

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中使用一样。

java">File testFile = file("src/xxx.txt")
//创建文件
testFile.createNewFile()
//删除
testFile.delete()

文件集合

java">FileCollection fileList = files(['src/xxx.txt','src/yyyy.txt'])

文件树

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

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

文件拷贝

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

java">task copyTask(type: Copy){
	from 'src/main'
	into 'D:/copyTest'
}

文件改名

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

java">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即可

java">task toZip(type:Zip){
	from 'src/main'
	into 'build'
	baseName = 'myZip'
}

读取压缩包

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

java">FileTree zip = zipTree('myZip.zip')

Gradle依赖

依赖指定是build.gradle中的dependencies
如下就依赖了junit5的依赖
在这里插入图片描述
共有三种依赖方式

  1. 本地依赖:依赖于本地的jar包,可以用文件集合或文件树进行指定
  2. 项目依赖:依赖某个project,即一个工程依赖另一个工程
  3. 直接依赖:当项目需要某些依赖的时候直接使用maven仓库中的依赖坐标导入

本地依赖实例

使用implementation进行声明

java">implementation files('lib/mybatis-plus-spring-starter.jar','lib/mysql-connect-java.jar')
implementation fileTree('dir':'lib',includes: ['*.jar'])

项目依赖实例

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

java">implementation project(':kid1')

直接依赖实例

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

java">
implementation group: 'mysql', name: 'mysql-connector-java', version: '8.0.30'

依赖的类型

类型说明
compileOnlyjava插件提供,曾短暂的叫provided,后续版本已经改成了compileOnly,适用于编译期需要而不需要打包的情况
runtimeOnlyjava插件提供.只在运行期有效,编译时不需要,比如mvsg! 驱动包。,取代老版本中被移除的runtime
implementationjava插件提供,针对源码src/main目录 ,在编译、运行时都有效取代老版本中被移除的compile
testCompileOnlyjava插件提供,用于编译测试的依赖项,运行时不需要
testRuntimeOnlyjava插件提供.只在测试运行时需要,而不是在测试编译时需要,取代老版本中被移除的testRuntime
testImplementationjava插件提供,针对测试代码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

java">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进行指定

java">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包就会报错!

java">configurations.all(){
    Configuration config ->
        config.resolutionStrategy.failOnVersionConflict()
}

http://www.niftyadmin.cn/n/1717104.html

相关文章

使用JdbcTemplate来获取数据库表字段对应的数据

在默认情况中我们在使用数据库查询时 Class.forName(dom.getDriver()); //加载MYSQL JDBC驱动程序 String urldom.getUrl()"/"datebaseName"?characterEncodingUTF-8"; Connection conn DriverManager.getConnection(url,dom.getUsername(),dom.getPas…

Configuration 注解中使用 Autowired 注解 IDER 报错

在 Spring Boot 项目中会用 Configuration 注解来初始化配置, 这时可以通过 autowired 自动注入封装好的model对象, 方便使用yml中的配置的数据。这样做代码运行没问题,通过该对象也可以成功的获取yml配置文件中的数据,但是 IDE 却给出 “Could not auto…

Spring中基于Java的配置@Configuration和@Bean用法

Spring中为了减少xml中配置&#xff0c;可以声明一个配置类&#xff08;例如SpringConfig&#xff09;来对bean进行配置。 一、首先&#xff0c;需要xml中进行少量的配置来启动Java配置: [java] view plaincopy <?xml version"1.0" encoding"UTF-8"?&…

阿里云centos7 安装mysql 5.7教程以及中间遇到的问题处理方法

今天准备在阿里云centos7上装一个mysql 碰到许多问题&#xff0c;记录一下 Mysql 下载地址 https://dev.mysql.com/downloads/mysql/#downloads 下载第一个就可以了612.1M需要注册登录如果没有可以私信我 然后安装参考http://www.jb51.net/article/87160.htm?pc 安装的时…

Centos 7 开放查看端口 防火墙关闭打开

Centos 7 firewall 命令&#xff1a; 查看已经开放的端口&#xff1a; firewall-cmd --list-ports1 开启端口 firewall-cmd --zonepublic --add-port80/tcp --permanent1 命令含义&#xff1a; –zone #作用域 –add-port80/tcp #添加端口&#xff0c;格式为&#xff1a;端口…

数据库字符集与排序规则(Character Set And Collation)

数据库需要适应各种语言和字符就需要支持不同的字符集&#xff08;Character Set&#xff09;&#xff0c;每种字符集也有各自的排序规则&#xff08;Collation&#xff09;。 &#xff08;注意&#xff1a;Collation原意为校对&#xff0c;校勘&#xff0c;但是根据实际使用场…

如何利用PS中的钢笔抠图

PS钢笔抠图步骤&#xff1a; 1、双击打开PS-------文件----打开需要处理的图片&#xff1a;&#xff08;此图片仅仅为了展示用钢笔抠取弧线的方法&#xff0c;其实用其他方法抠取有可能更方便&#xff09;2、选择左边工具栏里的钢笔工具 钢笔工具配置要求&#xff1a;3、为啥首…

Nginx 介绍

一 Nginx简介Nginx是一款开源代码的高性能HTTP服务器和反向代理服务器&#xff0c;同时支持IMAP/POP3/SMTP代理服务 1.Nginx工作原理Nginx由内核和模块组成&#xff0c;完成工作是通过查找配置文件将客户端请求映射到一个location block(location是用于URL匹配的命令)&#xff…