【gradle】从settings.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 文件
项目名称中
:
代表项目的分隔符, 类似路径中的/
. 如果以:
开头则表示相对于 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 |
providedCompile | war 插件提供支持,编译、测试阶段代码需要依赖此类jar 包,而运行阶段容器已经提供了相应的支持,所以无需将这些文件打入到war 包中了 | 例如servlet-api.jar、jsp-api.jar |
compile | 编译范围依赖在所有的 classpath 中可用,同时它们也会被打包 | 在 gradle 7.0 已经移除 |
runtime | untime 依赖在运行和测试系统的时候需要,在编译的时候不需要,比如mysql 驱动包 | 在 gradle 7.0 已经移除 |
api | java-library 插件提供支持,这些依赖项可以传递性地导出给使用者,用于编译时和运行时 | 取代老版本中被移除的 compile |
compileOnlyApi | java-library 插件提供支持,在声明模块和使用者在编译时需要的依赖项,但在运行时不需要 |
例子:
分析:
api | implementation | |
---|---|---|
编译时 | 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
文件,用来配置版本、插件、依赖库等信息
4.1、repositorybuild 文件中常见的属性和方法:
4.2、Subprojects 与 Allprojects从上往下找,找到了就停止,找不到继续往下找
4.3、ext对指定工程进行配置
4.4、buildscript自定义属性
- buildscript{}必须在 build.gradle 文件的最前端。
- 对于多项目构建,项目的 buildscript ()方法声明的依赖关系可用于其所有子项目的构建脚本。
总结
记录了一些在尝试建立测试模块中不了解的内容,之后在看源码的过程中遇到问题再补充吧…
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
分享标题:【gradle】从settings.gradle说起-创新互联
本文URL:http://azwzsj.com/article/cojige.html