赞
踩
学习Spring源码的时候,发现现在Spring项目是用gradle构建的,因为平时工作都是用的maven,所以只能将学的Gradle知识点记录一下,无聊的学习成本又增加了。
学习之前,推荐两个学习网址,w3cschool 和 官网。官网不用翻译插件我看起来是很吃力,所以我选择前者。安装教程、配置环境变量什么的就按照上面两个网址任意一个操作就行了。不过这里友情提示一下,我在网上看视频学习的时候,视频作者特意强调 Idea 和 gradle 之间有版本依赖的,如果版本不匹配,会导致一些莫名其妙的问题。如何查看自己的Idea 使用的哪个版本的Gradle,方式如下:
1. 找到自己Idea的安装目录;
2. 在安装目录的 /plugins/gradle/lib 目录下有对应的gradle版本;
如图,我的idea对应的版本是 7.4,所以我安装的就是 7.4版本。
因为是入门,没有什么讲究,只为了自己能用些基础的就行,所以直接用 Idea 创建了一个gradle 项目,看看究竟是什么样子的。如图:
感觉和maven项目差不多,只是 pom.xml 换成了 build.gradle 。这个文件也是入门的关键。下面是上述Demo中 build.gradle 文件里面的内容:
- plugins {
- id 'java'
- }
-
- group 'org.example'
- version '1.0-SNAPSHOT'
-
- repositories {
- mavenCentral()
- }
-
- dependencies {
- testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
- testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
- implementation 'org.springframework:spring-beans:6.0.9'
- }
-
- test {
- useJUnitPlatform()
- }

第一个是 plugins 模块,里面指定了本项目用的 java 插件,Gradle中有好些插件,还可以自定义,具体的可以参考一下一开始推荐的两个网址。
执行命令:
gradle tasks
会看到如下输出:
- \GradleDemo> gradle tasks
-
- > Task :tasks
-
- ------------------------------------------------------------
- Tasks runnable from root project 'GradleDemo'
- ------------------------------------------------------------
-
- Build tasks
- -----------
- assemble - Assembles the outputs of this project.
- build - Assembles and tests this project.
- buildDependents - Assembles and tests this project and all projects that depend on it.
- buildNeeded - Assembles and tests this project and all projects it depends on.
- classes - Assembles main classes.
- clean - Deletes the build directory.
- jar - Assembles a jar archive containing the main classes.
-
- To see more detail about a task, run gradle help --task <task>
-
- BUILD SUCCESSFUL in 559ms
- 1 actionable task: 1 executed

从这里可以看到,java 插件提供了assemble、build、buildDependents、buildNeeded、classes、clean 和 jar 这些任务(task),关于什么是task,可以参考一开始说的那两个网址。这里先忽略,不影响我们入门。
其实这个就对应了 maven 里面的几个命令 clean, compile(这里是classes) , build等。是那味儿了啊。所以我们在需要编译,构建的时候,换成如下命令就行了:
- \GradleDemo> gradle clean classes build
-
- BUILD SUCCESSFUL in 700ms
- 3 actionable tasks: 2 executed, 1 up-to-date
然后就是 group 和 version ,这两个应该没有好解释 的,就是和maven 里面的一样。
再下面就是 repositories 模块,这个和maven里面的仓库是一个含义,这两默认是走的仓库是maven 中心仓库。也可以如下自定义:
- repositories {
- mavenLocal()
- maven { name "Alibaba" ; url "https://maven.aliyun.com/repository/public" }
- maven { url "https://maven.aliyun.com/repository/central" }
- maven { url "https://maven.aliyun.com/repository/releases" }
- maven { url "https://maven.aliyun.com/repository/spring" }
- maven { url "https://maven.aliyun.com/repository/google" }
- maven { name "Bstek" ; url "https://nexus.bsdn.org/content/groups/public/" }
- mavenCentral()
- }
访问的顺序是从上到下依次访问。
再往下就是 dependencies 模块,含义和maven里面的<dependencies> 标签一样。这个模块里面每一行就是一个依赖,对应的 maven 里面<dependency> 标签,前面的 testRuntimeOnly、implementation 对应的就是 maven里面 <dependency> 标签下的<scope> 标签。以下是一些常见的范围配置选项及其含义:
implementation
: 这是最常用的配置选项之一。它表示将依赖项包含在项目的编译路径中,同时也会将其传递给依赖该项目的其他模块。这意味着依赖项将被编译到最终的构建产物中。
compileOnly
: 使用该选项可以将依赖项包含在编译路径中,但不会将其传递给依赖该项目的其他模块。这意味着依赖项仅在编译时可用,而不会被打包到最终的构建产物中。
runtimeOnly
: 该选项表示依赖项只在运行时可用,而不参与编译过程。依赖项将被添加到运行时类路径中,但不会影响编译产物。
testImplementation
: 这个选项用于测试相关的依赖项,它会将依赖项添加到项目的测试编译路径中,以便在单元测试或集成测试中使用。
testCompileOnly
: 与 compileOnly
类似,但将依赖项仅包含在测试编译路径中,而不会传递给其他测试模块。
testRuntimeOnly
: 该选项表示依赖项仅在测试运行时可用,不会参与测试编译过程。
最后一个就是 test 模块,用于配置项目的测试相关设置和依赖项。它定义了项目的测试任务和测试依赖,使您能够编写和运行单元测试、集成测试等各种测试。例如指定测试源代码目录、测试报告的生成路径等。
- test {
- testLogging {
- events 'passed', 'skipped', 'failed'
- }
- reports.html.destination = file("$buildDir/reports/tests")
- }
暂时略过,后面再补充。
顺便提一下,其实 repositories 模块 也可以在 gradle 安装目录下的 init.d目录(如果没有,手动建一个)下配置一个全局的,例如:
- allprojects {
- repositories {
- mavenLocal()
- maven { name "Alibaba" ; url "https://maven.aliyun.com/repository/public" }
- maven { url "https://maven.aliyun.com/repository/central" }
- maven { url "https://maven.aliyun.com/repository/releases" }
- maven { url "https://maven.aliyun.com/repository/spring" }
- maven { url "https://maven.aliyun.com/repository/google" }
- maven { name "Bstek" ; url "https://nexus.bsdn.org/content/groups/public/" }
- mavenCentral()
- }
-
- buildscript {
- repositories {
- maven { name "Alibaba" ; url 'https://maven.aliyun.com/repository/public' }
- maven { url "https://maven.aliyun.com/repository/central" }
- maven { url "https://maven.aliyun.com/repository/releases" }
- maven { url "https://maven.aliyun.com/repository/spring" }
- maven { url "https://maven.aliyun.com/repository/google" }
- maven { name "Bstek" ; url 'https://nexus.bsdn.org/content/groups/public/' }
- maven { name "M2" ; url 'https://plugins.gradle.org/m2/' }
- }
- }
- }

其中,repositories
部分用于指定构建过程中所需的依赖仓库。buildscript
块用于配置构建过程中所需的构建脚本自身的依赖项和仓库。不过即使配置了全局,如果在项目中重新配置了repositories
或者buildscript
模块,那将以项目中的配置稳准,也就是说项目中的配置优先级更高。Gradle 构建系统按照以下顺序解析 repositories
块:
build.gradle
文件。build.gradle
文件中包含了 repositories
块,Gradle 将使用该配置。build.gradle
文件中没有定义 repositories
块,Gradle 将查找 init.d
目录下的 init.gradle
文件。init.gradle
文件中定义了 repositories
块,Gradle 将使用该配置。build.gradle
文件中定义 repositories
块,也没有在 init.gradle
文件中定义,Gradle 将使用其默认的配置,通常包括 Maven Central 和 JCenter。因此,如果在项目的 build.gradle
文件中配置了 repositories
块,Gradle 将使用该配置,并忽略 init.gradle
文件中的配置。
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。