我的Gradle折腾经历

616 阅读9分钟

编辑历史

2023-07-31 10:41 18:18,在这篇文章中我将会介绍如何使用 Gradle 作为构建工具新建一个 SpringBoot 项目,并介绍 Gradle 的一些概念。

2023-08-01 11:23,接着整理

宜逛论坛 如果你是房间里最聪明的人,那么你走错房间了

参考资料

官网:gradle.org/

gradle.org/guides/

spring.io/guides/gs/r…

前提工具

JDK

Win + R , 打开控制台运行 java -version 命令,查看是否已安装JDK

Microsoft Windows [版本 10.0.18363.2094]
(c) 2019 Microsoft Corporation。保留所有权利。

java version "1.8.0_333"
Java(TM) SE Runtime Environment (build 1.8.0_333-b02)
Java HotSpot(TM) 64-Bit Server VM (build 25.333-b02, mixed mode)

IDEA

我的 IDEA 版本信息如下:

IntelliJ IDEA 2021.2.1 (Ultimate Edition)
内部版本号 #IU-212.5080.55,August 24, 2021 构建
Licensed to IntelliJ IDEA Evaluator
到期日期: August 30, 2023
运行时版本: 11.0.11+9-b1504.16 amd64
VM: OpenJDK 64-Bit Server VM,JetBrains s.r.o.
Windows 10 10.0
GC: G1 Young Generation, G1 Old Generation
Memory: 2032M
Cores: 6

新建项目(模块)

在这个教程中,我新建了一个名为 luckytea 的 Gradle 项目,项目 SDK 选择了1.8,类型选择了 Gradle-Groovy

Snipaste_2023-07-31_18-17-10.png

Spring Boot 的版本 2.7.14,添加的依赖项:LombokSpring Web

Snipaste_2023-07-31_18-17-35.png

生成的项目目录结构如下

Snipaste_2023-08-01_11-01-49.png

Gradle是什么

Gradle 是一种基于 Groovy 语言的自动化构建工具。它具有强大的构建脚本编写能力,并支持多种语言和平台。

Gradle 使用领域特定语言(DSL)来定义项目的构建逻辑,使构建脚本易于编写和维护。

项目结构解析

settings.gradle

这是 Gradle 构建工具的配置文件,它定义了 Gradle 项目的基本设置,比如包含哪些子项目或模块。

rootProject.name = 'luckytea'

build.gradle

这是 Gradle 构建脚本文件,它定义了项目的构建配置和依赖项。你可以在这个文件中指定项目的插件、依赖库、任务等。

// 插件
plugins {
    id 'java'
    id 'org.springframework.boot' version '2.7.14'
    id 'io.spring.dependency-management' version '1.0.15.RELEASE'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'

java {
    sourceCompatibility = '1.8'
}

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

// 依赖库
dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

// 任务
tasks.named('test') {
    useJUnitPlatform()
}

/gradle/wrapper

这个目录包含 Gradle Wrapper 相关的文件。

Gradle Wrapper 是一个用于管理和下载Gradle的版本的工具,用于可确保项目在不同环境中使用相同版本的Gradle进行构建,从而提高构建的一致性和可重复性。

Gradle Wrapper 是 Gradle 提供的一种机制,用于将 Gradle 版本与项目关联。它由 Gradle 版本和启动脚本组成,可以被包含在项目中,并通过运行相应的脚本来下载和运行指定版本的 Gradle

该目录中包含了 Gradle Wrapper 脚本 gradle-wrapper.propertiesWrapper JAR文件 gradle-wrapper.jar

gradle-wrapper.properties 内容如下:

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https://services.gradle.org/distributions/gradle-8.2.1-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

distributionBase:指定了Gradle分发包的基本路径。值为GRADLE_USER_HOME,表示将Gradle分发包存储在用户的Gradle目录下。在我的Windows计算机上的路径为:C:\Users\yourusername.gradle\wrapper\dists

distributionPath:指定了Gradle Wrapper下载的分发包存放的相对路径。值为wrapper/dists,表示将分发包存储在项目的wrapper/dists目录下。

distributionUrl:指定了Gradle下载的分发包的URL链接。值为https://services.gradle.org/distributions/gradle-8.2.1-bin.zip,表示下载Gradle版本号为8.2.1的二进制分发包。

networkTimeout:指定了Gradle下载分发包的网络超时时间,单位是毫秒。默认值为10000,表示10秒超时。

validateDistributionUrl:指示Gradle是否验证distributionUrl所指向的分发包的有效性。默认值为true,表示Gradle会验证分发包的URL链接是否可用。

zipStoreBase:指定了Gradle Wrapper存储分发包的基本路径。值为GRADLE_USER_HOME,表示将分发包存储在用户的Gradle目录下。

zipStorePath:指定了Gradle Wrapper存储分发包的相对路径。值为wrapper/dists,表示将分发包存储在项目的wrapper/dists目录下。

如上这些配置项用于Gradle Wrapper下载和缓存Gradle的分发包。通过配置这些属性,可以指定Gradle版本、下载源的URL、缓存路径等信息,从而影响Gradle Wrapper的行为和所使用的Gradle版本。

gradle-wrapper.jar

这个JAR文件是Gradle Wrapper的核心文件,它包含了Gradle Wrapper的实现和必需的依赖项。

gradlew

gradlewGradle Wrapper 的启动脚本文件。它可以在不需要全局安装Gradle的情况下运行Gradle命令。该脚本会自动下载并使用项目所需的Gradle版本,确保构建使用的Gradle版本与项目兼容。只需简单地在项目目录中运行gradlew脚本,即可自动下载、配置和运行Gradle命令,使构建过程更加方便快捷。

gradlew.bat

gradlew.bat 是针对Windows操作系统的Gradle Wrapper脚本文件。它与gradlew 脚本功能相似,但使用不同的扩展名和命令行语法,以适应Windows环境。

gradlew.bat 文件可以自动下载和管理项目所需的Gradle版本。当运行gradlew.bat 脚本时,它会检查是否已经存在所需版本的Gradle,并在必要时自动下载。

通过运行 gradlew.bat 脚本,可以在Windows命令提示符PowerShell中执行Gradle命令。这样可以方便地在Windows环境下构建、测试和部署项目。

gradlew.bat 文件的作用和gradlew 脚本类似。但与gradlew 脚本不同的是,gradlew.bat 专门为Windows操作系统设计,使得开发团队在不同操作系统上使用Gradle Wrapper 时能够保持一致。

./gradlew 与 gradle 之间

如:./gradlew buildgradle build是用于构建项目的Gradle命令,它们在功能上是相同的,都用于执行项目的构建过程。

但它们之间存在一些区别

./gradlew build是在项目根目录下使用Gradle Wrapper(gradlew脚本)执行构建命令,而gradle build是在系统环境中使用全局安装的Gradle执行构建命令。

使用./gradlew命令可以避免手动安装和配置全局Gradle环境变量,使得构建过程更加简单和自包含。

./gradlew命令是一个 shell 脚本,在大部分 Unix/Linux 和 macOS 系统上可以直接使用。而gradle命令则需要事先在系统中安装 Gradle,因此在跨平台项目中,使用./gradlew可以更方便地确保构建的兼容性。

Gradle 命令

常用命令

gradle build:执行项目的编译和打包操作,生成可部署的构建产物。

gradle clean:清除项目的构建产物和临时文件,通常在重新构建之前运行。

gradle test:运行项目的单元测试。

gradle run:运行项目的主程序。

gradle tasks:列出项目中可执行的Gradle任务。

gradle dependencies:显示项目的依赖关系。

gradle help:显示Gradle的帮助信息。

踩过的坑

运行 某些 Gradle 命令需要在项目根目录下,否则会提示如下错误

gradle tasks

FAILURE: Build failed with an exception.

* What went wrong: Directory 'C:\Users\UserName' does not contain a Gradle build.

A Gradle build should contain a 'settings.gradle' or 'settings.gradle.kts' file in its root directory. It may also contain a 'build.gradle' or 'build.gradle.kts' file.

To create a new Gradle build in this directory run 'gradle init'

For more detail on the 'init' task see https://docs.gradle.org/7.3.3/userguide/build_init_plugin.html

For more detail on creating a Gradle build see https://docs.gradle.org/7.3.3/userguide/tutorial_using_tasks.html

* Try:
> Run gradle init to create a new Gradle build in this directory.
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.

* Get more help at https://help.gradle.org

BUILD FAILED in 613ms

gradlew 脚本命令

常用命令

使用Gradle Wrapper(gradlew脚本),可以执行以下一些常用的命令:

./gradlew build:执行项目的构建过程,包括编译源代码、运行单元测试、打包生成可执行文件等。

./gradlew clean:执行项目的清理操作,删除生成的构建输出文件和临时文件。

./gradlew test:运行项目的单元测试。

./gradlew tasks:列出所有可用的 Gradle 任务。

./gradlew run:启动项目的主应用程序。

./gradlew dependencies:显示项目依赖关系。

./gradlew wrapper:生成或更新 Gradle Wrapper 文件。

./gradlew help:查看 Gradle 的帮助文档。

除了上述命令之外,还可以根据项目的需要配置自定义任务,在Gradle脚本中定义相应的任务,并使用./gradlew <taskName>来执行它们。需要注意的是,具体可执行的命令取决于项目的构建脚本(build.gradle)中的配置。不同的项目可能有不同的任务和自定义命令

./gradlew tasks

在项目的根目录下运行 ./gradlew tasks 命令,可以看到有如下输出

PS D:\03-Person-Project\38-LearningJava\learnjava\luckytea> ./gradlew tasks

> Task :tasks

------------------------------------------------------------
Tasks runnable from root project 'luckytea'
------------------------------------------------------------

Application tasks
-----------------
bootRun - Runs this project as a Spring Boot application.

Build tasks
-----------
assemble - Assembles the outputs of this project.
bootBuildImage - Builds an OCI image of the application using the output of the bootJar task
bootJar - Assembles an executable jar archive containing the main classes and their dependencies.
bootJarMainClassName - Resolves the name of the application's main class for the bootJar task.
bootRunMainClassName - Resolves the name of the application's main class for the bootRun task.
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 classes of the 'main' feature.
testClasses - Assembles test classes.

Build Setup tasks
-----------------
init - Initializes a new Gradle build.
wrapper - Generates Gradle wrapper files.

Documentation tasks
-------------------
javadoc - Generates Javadoc API documentation for the 'main' feature.

Help tasks
----------
buildEnvironment - Displays all buildscript dependencies declared in root project 'luckytea'.
dependencies - Displays all dependencies declared in root project 'luckytea'.
dependencyInsight - Displays the insight into a specific dependency in root project 'luckytea'.
dependencyManagement - Displays the dependency management declared in root project 'luckytea'.
help - Displays a help message.
javaToolchains - Displays the detected java toolchains.
outgoingVariants - Displays the outgoing variants of root project 'luckytea'.
projects - Displays the sub-projects of root project 'luckytea'.
properties - Displays the properties of root project 'luckytea'.
resolvableConfigurations - Displays the configurations that can be resolved in root project 'luckytea'.
tasks - Displays the tasks runnable from root project 'luckytea'.

Verification tasks
------------------
check - Runs all checks.
test - Runs the test suite.

Rules
-----
Pattern: clean<TaskName>: Cleans the output files of a task.
Pattern: build<ConfigurationName>: Assembles the artifacts of a configuration.

To see all tasks and more detail, run gradlew tasks --all

To see more detail about a task, run gradlew help --task <task>

BUILD SUCCESSFUL in 1s
1 actionable task: 1 executed

查看计算机安装的全局Gradle

打开命令提示符(CMD)或 PowerShell,运行以下命令检查当前的 Gradle 版本:gradle -v

------------------------------------------------------------
Gradle 7.3.3
------------------------------------------------------------

Build time:   2021-12-22 12:37:54 UTC
Revision:     6f556c80f945dc54b50e0be633da6c62dbe8dc71

Kotlin:       1.5.31
Groovy:       3.0.9
Ant:          Apache Ant(TM) version 1.10.11 compiled on July 10 2021
JVM:          1.8.0_333 (Oracle Corporation 25.333-b02)
OS:           Windows 10 10.0 amd64

如何升级Windows计算机上Gradle版本

1、查看当前的 Gradle 版本:

2、下载新的 Gradle 版本

访问 Gradle 官方网站:gradle.org/releases/ ,下载最新版本的 Gradle 发行版。选择二进制版本,而不是源代码版本。

Jul 10, 2023 发行了 v8.2.1 版本

3、解压下载的 Gradle 压缩包:将下载的 Gradle 压缩包解压到你选择的目录

4、配置系统环境变量:添加 Gradle 的 bin 目录路径到系统的 PATH 环境变量中。

按下 Win + S 组合键打开 Windows 搜索。
搜索 "系统环境变量" 并选择“编辑系统环境变量”选项。
在弹出的窗口中,点击“环境变量”按钮。
在 "系统变量" 部分,找到名为 "Path" 的变量,双击它以编辑它。
在变量值的末尾添加新的 Gradle bin 目录的路径,例如 D:\Gradle\bin。
确保输入的路径与你实际解压 Gradle 的路径一致。
点击确认保存变更。

验证安装:重新启动命令提示符或 PowerShell,运行以下命令验证 Gradle 是否成功升级: