【gradle】从 settings.gradle说起

gradle 系列

gradle下载配置



前言

1、在搭建好 spring 5 源码后,在自己编写测试用例和添加测试 module 时,会遇到一些配置报错信息,由于不了解 gradle 配置文件的语法和含义,产生了一些困扰,因此在这里学习一下 gradle 一些配置文件语法。
2、gradle 官网:https://gradle.org/


1、settings.gradle

一个 gradle 工程中只能有一个settings.gradle文件

settings.gradle 文件的语法,这里参考spring 源码的 settings 文件

settings.gradle

项目名称中 :代表项目的分隔符, 类似路径中的 /. 如果以 : 开头则表示相对于 root project

//根工程项目名
rootProject.name = 'root'
//包含的子工程名称
include 'subject01' 
include 'subject02' 
include 'subject03'
//包含的子工程下的子工程名称
include 'subject01:subproject011' 
include 'subject01:subproject012'

2、依赖


2.1、依赖的方式

Gradle 中的依赖分别为直接依赖,项目依赖,本地jar 依赖

直接依赖

dependencies {
//①.依赖当前项目下的某个模块[子工程]
implementation project(':spring-aop')
//②.直接依赖本地的某个jar文件
implementation files('libs/foo.jar', 'libs/bar.jar')
//②.配置某文件夹作为依赖项
implementation fileTree(dir: 'libs', include: ['*.jar'])
//③.直接依赖 简写
implementation 'org.apache.logging.log4j:log4j:2.17.2'
//③.直接依赖 完整版 group/name/version 同 maven 的 GAV
implementation group: 'org.apache.logging.log4j', name: 'log4j', version: '2.17.2'
}

项目依赖:从项目的某个模块依赖另一个模块

例如:spring-context 依赖 spring-aop

implementation project(':spring-aop')

本地 jar 依赖:本地 jar 文件依赖

一般包含以下两种方式

/直接依赖某文件
implementation files('libs/foo.jar', 'libs/bar.jar')
//配置某文件夹作为依赖项
implementation fileTree(dir: 'libs', include: ['*.jar'])

2.2、依赖的下载

当执行 build 命令时,gradle 就会去配置的依赖仓库中下载对应的 Jar,并应用到项目中。

2.3、依赖的类型

类似于 Maven 的 scope 标签

类型作用补充
compileOnly适用于编译期需要而不需要打包的情况
runtimeOnly只在运行期有效,编译时不需要取代老版本中被移除的 runtime
implementation针对源码[src/main 目录] ,在编译、运行时都有效取代老版本中被移除的 compile
testCompileOnly用于编译测试的依赖项,运行时不需要
testRuntimeOnly只在测试运行时需要,而不是在测试编译时需要取代老版本中被移除的testRuntime
testImplementation针对测试代码[src/test 目录]取代老版本中被移除的testCompile
providedCompilewar 插件提供支持,编译、测试阶段代码需要依赖此类jar 包,而运行阶段容器已经提供了相应的支持,所以无需将这些文件打入到war 包中了例如servlet-api.jar、jsp-api.jar
compile编译范围依赖在所有的 classpath 中可用,同时它们也会被打包在 gradle 7.0 已经移除
runtimeuntime 依赖在运行和测试系统的时候需要,在编译的时候不需要,比如mysql 驱动包在 gradle 7.0 已经移除
apijava-library 插件提供支持,这些依赖项可以传递性地导出给使用者,用于编译时和运行时取代老版本中被移除的 compile
compileOnlyApijava-library 插件提供支持,在声明模块和使用者在编译时需要的依赖项,但在运行时不需要

api 与implementation 区别

例子:
区别
分析:

apiimplementation
编译时libC 的内容发生变化,由于使用的是 api 依赖,依赖会传递,所以 libC、libA、projectX 都要发生变化,都需要重新编译,速度慢如果libD 的内容发生变化,由于使用的是implemetation 依赖,依赖不会传递,只有libD、libB 要变化并重新编译,速度快
运行时libC、libA、projectX 中的class 都要被加载api相同
总结多数情况下使用implementation

拓展:


在这里插入图片描述


2.3、解决依赖冲突

例子:

在这里插入图片描述

2.3.1、默认Gradle 会使用最新版本的 jar 包

新版本的 jar 包一般都是向下兼容的(建议使用官方自带的这种解决方案)

2.3.2、强制使用某个版本

dependencies {
	testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1' 
	testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1' 
	//强制使用某个版本!!【官方建议使用这种方式】
	implementation('org.slf4j:slf4j-api:1.4.0!!')
	//这种效果和上面那种一样,强制指定某个版本
	implementation('org.slf4j:slf4j-api:1.4.0'){
		version{strictly("1.4.0")
	}
}

3、插件

在这里插入图片描述


3.1、内部插件

configure(allprojects) { project ->
	group = "org.springframework"
	version = qualifyVersionIfNecessary(version)

	apply plugin: "java"
	apply plugin: "kotlin"
	apply plugin: "checkstyle"
	apply plugin: "propdeps"
	apply plugin: "test-source-set-dependencies"
	apply plugin: "io.spring.dependency-management"
	apply from: "${gradleScriptDir}/ide.gradle"
}

3.2、第三方插件

如果第三方插件已经被托管在 https://plugins.gradle.org/

// 3rd party plugin repositories can be configured in settings.gradle
plugins {
	id "io.spring.dependency-management" version "1.0.7.RELEASE" apply false
	id "org.jetbrains.kotlin.jvm" version "1.2.71" apply false
	id "org.jetbrains.dokka" version "0.9.18"
	id "org.asciidoctor.convert" version "1.5.8"
	id "com.jfrog.artifactory" version '4.9.8' apply false
}

4、build.gradle


在 spring 中一般为 project-name.gradle

每个 module 都要自己的.gradle文件,用来配置版本、插件、依赖库等信息

build 文件中常见的属性和方法:

常用方法和属性

4.1、repository

从上往下找,找到了就停止,找不到继续往下找

1

4.2、Subprojects 与 Allprojects

对指定工程进行配置
在这里插入图片描述

4.3、ext

自定义属性

ext

4.4、buildscript

  1. buildscript{}必须在 build.gradle 文件的最前端。
  2. 对于多项目构建,项目的 buildscript ()方法声明的依赖关系可用于其所有子项目的构建脚本。

buildscript


总结

记录了一些在尝试建立测试模块中不了解的内容,之后在看源码的过程中遇到问题再补充吧…

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值