通过使用 Gradle init 创建 Java 应用,学习 Gradle 的基础知识。

在本部分中,您将

  • 初始化一个新的 Gradle 项目

  • 构建项目

  • 查看 Gradle 的项目结构

  • 在 IntelliJ IDEA 中打开项目

  • 浏览 Gradle 文件和构建脚本

  • 了解 Gradle wrapper

步骤 0. 开始之前

  1. 确保已安装 Gradle

  2. 安装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 项目结构,并将其与我们的教程项目进行比较

project structure

一个 构建 包含

  1. 一个顶级 settings.gradle(.kts) 文件。

  2. 一个 根项目

  3. 一个或多个子项目,每个子项目都有自己的 build.gradle(.kts) 文件。

一些构建可能在根项目中包含一个 build.gradle(.kts) 文件,但不建议这样做。

libs.version.toml 文件是一个版本目录,用于依赖管理,您将在本教程的后续部分中了解它。

在本教程中

  1. 根项目称为 tutorial,并在 settings.gradle 文件中使用 rootProject.name = "tutorial" 定义。

  2. 子项目称为 app,并在 settings.gradle 文件中使用 include("app") 定义。

根项目可以位于顶级目录中,也可以有自己的目录。

一个构建

  • 表示您可以一起构建、测试和/或发布的一组相关软件。

  • 可以选择包含其他构建(即其他软件,如库、插件、构建时工具等)。

一个项目

  • 代表您的架构中的一个部分 - 一个库、一个应用程序、一个 Gradle 插件等。

  • 可以选择包含其他项目。

步骤 5. 在 IDE 中查看 Gradle 文件

双击 tutorial 目录中的 settings.gradle.kts 文件,在 IntelliJ IDEA 中打开项目。对于 Groovy DSL 用户,您可能需要在单击 settings.gradle 文件时选择 IntelliJ IDEA 应用程序

intellij idea ide

在 IDE 中打开 settings.gradle(.kts)build.gradle(.kts) 文件

intellij idea open

步骤 6. 了解设置文件

一个项目由一个或多个子项目(有时称为模块)组成。

Gradle 读取 settings.gradle(.kts) 文件以了解哪些子项目构成项目构建。

查看项目中的文件

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")
settings.gradle
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 目录下)

build.gradle.kts
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()
}
build.gradle
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 子项目正在使用哪些依赖项和插件,以及在哪里找到它们。我们将在以下部分中更详细地了解这一点。

下一步: 运行任务 >>