189 8069 5689

【gradle】从settings.gradle说起-创新互联

gradle 系列

gradle下载配置

为龙井等地区用户提供了全套网页设计制作服务,及龙井网站建设行业解决方案。主营业务为网站设计、成都网站制作、龙井网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

【gradle】从 settings.gradle说起
  • gradle 系列
  • 前言
  • 1、settings.gradle
  • 2、依赖
    • 2.1、依赖的方式
      • 直接依赖
      • 项目依赖:从项目的某个模块依赖另一个模块
      • 本地 jar 依赖:本地 jar 文件依赖
    • 2.2、依赖的下载
    • 2.3、依赖的类型
      • api 与implementation 区别
    • 2.3、解决依赖冲突
      • 2.3.1、默认Gradle 会使用最新版本的 jar 包
      • 2.3.2、强制使用某个版本
  • 3、插件
    • 3.1、内部插件
    • 3.2、第三方插件
  • 4、build.gradle
    • 4.1、repository
    • 4.2、Subprojects 与 Allprojects
    • 4.3、ext
    • 4.4、buildscript
  • 总结


前言

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


总结

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

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


分享题目:【gradle】从settings.gradle说起-创新互联
链接URL:http://cdxtjz.cn/article/cojige.html

其他资讯