第 1 部分:初始化项目
通过使用 Gradle init 创建 Java 应用,学习 Gradle 的基础知识。
步骤 0. 开始之前
-
确保已安装 Gradle。
-
安装IntelliJ IDEA。社区版是 IntelliJ IDEA 的免费版本。
步骤 1. 初始化项目
要测试 Gradle 安装,请从命令行运行 Gradle
$ gradle
Welcome to Gradle 8.6.
Directory '/' does not contain a Gradle build.
To create a new build in this directory, run gradle init
如果未安装 Gradle,请参阅安装部分。
创建一个名为 tutorial
的新目录,并 cd
进入其中
$ mkdir tutorial
$ cd tutorial
使用以下参数运行 gradle init
以生成 Java 应用程序
$ gradle init --type java-application --dsl kotlin
$ gradle init --type java-application --dsl groovy
为任何其他提示选择默认值。
在本教程中,所有示例均基于 macOS。 |
完成后,目录应如下所示
.
├── .gradle (1)
│ ├── libs.version.toml (2)
│ └── ⋮
├── gradle (3)
│ └── wrapper
├── gradlew (4)
├── gradlew.bat (5)
├── settings.gradle.kts (6)
├── app (7)
│ ├── build.gradle.kts
│ └── src
└── ⋮ (8)
1 | 由 Gradle 生成的项目特定缓存目录。 |
2 | 版本目录,用于在中心位置为依赖项定义一组版本。 |
3 | 包含 Gradle Wrapper 的 JAR 文件和配置。 |
4 | 用于使用 Gradle Wrapper 执行构建的 macOS 和 Linux 脚本。 |
5 | 用于使用 Gradle Wrapper 执行构建的 Windows 脚本。 |
6 | 项目的 设置文件,其中定义了子项目的列表。 |
7 | Java 应用程序的源代码和构建配置。 |
8 | 可能存在一些其他 Git 文件,例如 .gitignore 。 |
.
├── .gradle (1)
│ ├── libs.version.toml (2)
│ └── ⋮
├── gradle (3)
│ └── wrapper
├── gradlew (4)
├── gradlew.bat (5)
├── settings.gradle (6)
├── app (7)
│ ├── build.gradle
│ └── src
└── ⋮ (8)
1 | 由 Gradle 生成的项目特定缓存目录。 |
2 | 版本目录,用于在中心位置为依赖项定义一组版本。 |
3 | 包含 Gradle Wrapper 的 JAR 文件和配置。 |
4 | 用于使用 Gradle Wrapper 执行构建的 macOS 和 Linux 脚本。 |
5 | 用于使用 Gradle Wrapper 执行构建的 Windows 脚本。 |
6 | 项目的 设置文件,其中定义了子项目的列表。 |
7 | Java 应用程序的源代码和构建配置。 |
8 | 可能存在一些其他 Git 文件,例如 .gitignore 。 |
步骤 2. 了解 Gradle Wrapper
Gradle Wrapper 是启动 Gradle 构建的首选方式。Wrapper 会下载(如果需要)并调用构建中声明的特定 Gradle 版本。
在您新创建的项目中,首先查看 Gradle Wrapper 使用的文件。它包含一个适用于 macOS 和 Linux 的 shell 脚本和一个适用于 Windows 的批处理脚本。
这些脚本允许您运行 Gradle 构建,而无需在系统上安装 Gradle。它还有助于确保不同开发人员和本地和 CI 机器使用同一版本的 Gradle 进行构建。
从现在开始,您将不再直接调用 Gradle;相反,您将使用 Gradle wrapper。
步骤 3. 调用 Gradle Wrapper
通过输入以下命令使用 wrapper
$ ./gradlew build
在 Windows 中,命令为
$ .\gradlew.bat build
首次运行 wrapper 时,如果尚未在您的机器上安装 Gradle 二进制文件,它将下载并缓存它们。
Gradle Wrapper 被设计为提交到源代码控制,以便任何人都可以在不首先安装和配置特定版本的 Gradle 的情况下构建项目。
在本例中,我们通过 wrapper 调用 Gradle 来构建我们的项目,因此我们可以看到 app
目录现在包含一个新的 build
文件夹
$ cd app
$ ls -al
drwxr-xr-x 10 gradle-user staff 320 May 24 18:07 build
-rw-r--r-- 1 gradle-user staff 862 May 24 17:45 build.gradle.kts
drwxr-xr-x 4 gradle-user staff 128 May 24 17:45 src
drwxr-xr-x 10 gradle-user staff 320 May 24 18:07 build
-rw-r--r-- 1 gradle-user staff 862 May 24 17:45 build.gradle
drwxr-xr-x 4 gradle-user staff 128 May 24 17:45 src
除非另有说明,否则构建过程生成的所有文件都进入 build
目录。
步骤 4. 了解 Gradle 的项目结构
让我们看一下标准的 Gradle 项目结构,并将其与我们的教程项目进行比较
一个 构建 包含
-
一个顶级
settings.gradle(.kts)
文件。 -
一个 根项目。
-
一个或多个子项目,每个子项目都有自己的
build.gradle(.kts)
文件。
一些构建可能在根项目中包含一个 build.gradle(.kts)
文件,但不建议这样做。
libs.version.toml
文件是一个版本目录,用于依赖管理,您将在本教程的后续部分中了解它。
在本教程中
-
根项目称为 tutorial,并在
settings.gradle
文件中使用rootProject.name = "tutorial"
定义。 -
子项目称为 app,并在
settings.gradle
文件中使用include("app")
定义。
根项目可以位于顶级目录中,也可以有自己的目录。
一个构建
-
表示您可以一起构建、测试和/或发布的一组相关软件。
-
可以选择包含其他构建(即其他软件,如库、插件、构建时工具等)。
一个项目
-
代表您的架构中的一个部分 - 一个库、一个应用程序、一个 Gradle 插件等。
-
可以选择包含其他项目。
步骤 5. 在 IDE 中查看 Gradle 文件
双击 tutorial
目录中的 settings.gradle.kts
文件,在 IntelliJ IDEA 中打开项目。对于 Groovy DSL 用户,您可能需要在单击 settings.gradle
文件时选择 IntelliJ IDEA 应用程序
在 IDE 中打开 settings.gradle(.kts)
和 build.gradle(.kts)
文件
步骤 6. 了解设置文件
一个项目由一个或多个子项目(有时称为模块)组成。
Gradle 读取 settings.gradle(.kts)
文件以了解哪些子项目构成项目构建。
查看项目中的文件
plugins {
// Apply the foojay-resolver plugin to allow automatic download of JDKs
id("org.gradle.toolchains.foojay-resolver-convention") version "0.7.0"
}
rootProject.name = "tutorial"
include("app")
plugins {
// Apply the foojay-resolver plugin to allow automatic download of JDKs
id 'org.gradle.toolchains.foojay-resolver-convention' version '0.7.0'
}
rootProject.name = 'tutorial'
include('app')
tutorial
根项目包含 app
子项目。include
调用的存在将 app
目录转换为子项目。
步骤 7. 了解构建脚本
每个子项目都包含自己的 build.gradle(.kts)
文件。
build.gradle(.kts)
文件是构建过程的核心组件,并定义了构建项目所需的任务。
Gradle 会读取并执行 build.gradle(.kts)
文件。
仔细查看 app
子项目中的构建文件(位于 app
目录下)
plugins {
// Apply the application plugin to add support for building a CLI application in Java.
application
}
repositories {
// Use Maven Central for resolving dependencies.
mavenCentral()
}
dependencies {
// Use JUnit Jupiter for testing.
testImplementation(libs.junit.jupiter)
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
// This dependency is used by the application.
implementation(libs.guava)
}
// Apply a specific Java toolchain to ease working on different environments.
java {
toolchain {
languageVersion.set(JavaLanguageVersion.of(11))
}
}
application {
// Define the main class for the application.
mainClass.set("running.tutorial.kotlin.App")
}
tasks.named<Test>("test") {
// Use JUnit Platform for unit tests.
useJUnitPlatform()
}
plugins {
// Apply the application plugin to add support for building a CLI application in Java.
id 'application'
}
repositories {
// Use Maven Central for resolving dependencies.
mavenCentral()
}
dependencies {
// Use JUnit Jupiter for testing.
testImplementation libs.junit.jupiter
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
// This dependency is used by the application.
implementation libs.guava
}
// Apply a specific Java toolchain to ease working on different environments.
java {
toolchain {
languageVersion = JavaLanguageVersion.of(11)
}
}
application {
// Define the main class for the application.
mainClass = 'running.tutorial.groovy.App'
}
tasks.named('test') {
// Use JUnit Platform for unit tests.
useJUnitPlatform()
}
此构建脚本让 Gradle 了解 app
子项目正在使用哪些依赖项和插件,以及在哪里找到它们。我们将在以下部分中更详细地了解这一点。
下一步: 运行任务 >>