Gradle入门教程:一步步教你使用Gradle

Gradle 入门教程:一步步教你使用 Gradle

Gradle 是一款功能强大、灵活且高性能的构建自动化工具,被广泛应用于 Java、Android 和其他各种项目的构建过程中。它基于 Groovy 或 Kotlin 语言的领域特定语言(DSL)来定义构建逻辑,比传统的 XML 配置方式更加简洁、易读和易维护。本教程将带你一步步入门 Gradle,从安装到创建第一个项目,再到常用的构建任务和高级特性,让你能够熟练使用 Gradle 进行项目构建。

一、Gradle 的优势

  • 灵活性和可扩展性: Gradle 的构建脚本基于 Groovy 或 Kotlin,可以编写任意复杂的构建逻辑,并且可以轻松扩展和自定义。
  • 高性能: Gradle 采用增量构建、构建缓存和并行执行等技术,可以显著提高构建速度。
  • 依赖管理: Gradle 集成了强大的依赖管理功能,可以自动解析和下载项目所需的依赖库。
  • 多项目构建: Gradle 可以轻松管理大型多项目构建,并支持项目之间的依赖关系。
  • 插件生态系统: Gradle 拥有丰富的插件生态系统,可以轻松集成各种构建任务和工具。
  • 跨平台: Gradle 可以在 Windows、macOS 和 Linux 等各种操作系统上运行。
  • 易于学习和使用: Gradle 的 DSL 简洁易懂,即使是初学者也可以快速上手。

二、安装 Gradle

在开始使用 Gradle 之前,你需要先安装它。有多种安装方式,这里介绍几种常用的方法:

1. 使用 SDKMAN! (推荐)

SDKMAN! 是一个用于管理多个软件开发工具包的命令行工具。使用 SDKMAN! 安装 Gradle 非常方便:

  • 安装 SDKMAN!

    bash
    $ curl -s "https://get.sdkman.io" | bash
    $ source "$HOME/.sdkman/bin/sdkman-init.sh"

  • 安装 Gradle

    bash
    $ sdk install gradle

  • 验证安装

    bash
    $ gradle -v

2. 手动安装

  • 下载 Gradle 发行版: 从 Gradle 官网(https://gradle.org/releases/)下载最新的 Gradle 发行版。
  • 解压发行版: 将下载的压缩包解压到你想要安装的目录。
  • 配置环境变量:
    • GRADLE_HOME: 将其设置为 Gradle 的安装目录。
    • PATH:$GRADLE_HOME/bin 添加到 PATH 环境变量中。
    • 例子 (Linux/macOS):
      bash
      export GRADLE_HOME=/opt/gradle-8.x
      export PATH=$GRADLE_HOME/bin:$PATH

      例子 (Windows):
      在系统环境变量中创建 GRADLE_HOME,值为 Gradle 的安装目录。然后编辑 PATH 变量,添加 %GRADLE_HOME%\bin
  • 验证安装:

    bash
    gradle -v

3. 使用包管理器

  • macOS (Homebrew):

    bash
    brew install gradle

  • Ubuntu/Debian (apt):

    bash
    sudo apt update
    sudo apt install gradle

三、创建第一个 Gradle 项目

安装好 Gradle 后,我们来创建一个简单的 Java 项目。

1. 创建项目目录

bash
mkdir my-gradle-project
cd my-gradle-project

2. 初始化 Gradle 项目

使用 gradle init 命令初始化 Gradle 项目:

bash
gradle init

该命令会提示你选择项目类型、构建脚本语言等。我们选择以下选项:

  • Select type of project to generate: 2: application (创建一个 Java 应用程序)
  • Select implementation language: 3: Java
  • Split functionality across multiple subprojects?: no (我们不需要多项目构建)
  • Select build script DSL: 1: Groovy2: Kotlin (选择 Groovy 或 Kotlin DSL, 推荐Kotlin)
  • Generate build using new APIs and behavior (some features may change in the next minor release)?: no (选择 no 可以使用稳定的 API)
  • Select test framework: 1: JUnit 44: JUnit Jupiter (选择 JUnit 4 或 JUnit 5, 推荐JUnit Jupiter)
  • Project name: my-gradle-project (可以使用默认的项目名称)
  • Source package: com.example (可以自定义包名)

执行完 gradle init 命令后,Gradle 会生成项目的基本结构,包括:

  • build.gradle (或 build.gradle.kts): 项目的构建脚本,使用 Groovy DSL 或 Kotlin DSL 编写。
  • settings.gradle (或 settings.gradle.kts): 项目的设置文件,用于配置项目名称和包含的子项目等。
  • gradlewgradlew.bat: Gradle Wrapper 脚本,用于在没有安装 Gradle 的环境下执行构建。
  • gradle/wrapper: Gradle Wrapper 的相关文件。
  • src/main/java: 存放项目源代码的目录。
  • src/test/java: 存放项目测试代码的目录。

3. 编写代码

src/main/java/com/example 目录下创建 App.java 文件,并编写以下代码:

```java
package com.example;

public class App {
public String getGreeting() {
return "Hello Gradle!";
}

public static void main(String[] args) {
    System.out.println(new App().getGreeting());
}

}
```

4. 运行项目

使用以下命令运行项目:

bash
./gradlew run

如果一切正常,你将在控制台看到输出 "Hello Gradle!"。

四、常用的构建任务

Gradle 提供了许多内置的任务,可以用于编译代码、运行测试、打包应用等。以下是一些常用的任务:

  • build: 编译项目代码,运行测试,并生成构建产物(例如 JAR 包)。
  • clean: 清理构建目录,删除构建产物。
  • run: 运行应用程序。
  • test: 运行测试。
  • jar: 生成 JAR 包。
  • assemble: 组装构建产物,但不运行测试。
  • check: 执行代码检查,例如运行测试和代码风格检查。
  • tasks: 列出所有可用的任务。
  • help --task <taskName>: 查看指定任务的帮助信息。

你可以使用 ./gradlew <taskName> 来执行指定的任务。例如,要编译代码并运行测试,可以使用 ./gradlew build 命令。

五、构建脚本详解 (build.gradlebuild.gradle.kts)

构建脚本是 Gradle 项目的核心,它定义了项目的构建逻辑。让我们来看看 build.gradlebuild.gradle.kts 文件的内容:

Groovy DSL (build.gradle):

```groovy
plugins {
id 'java'
id 'application'
}

repositories {
mavenCentral()
}

dependencies {
testImplementation 'junit:junit:4.13.2'
implementation 'com.google.guava:guava:31.1-jre'
}

application {
mainClass = 'com.example.App'
}

java {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
```

Kotlin DSL (build.gradle.kts):

```kotlin
plugins {
java
application
}

repositories {
mavenCentral()
}

dependencies {
testImplementation("org.junit.jupiter:junit-jupiter:5.9.2")
implementation("com.google.guava:guava:31.1-jre")
}

application {
mainClass.set("com.example.App")
}

java {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
```
解释:

  • plugins 块: 定义项目中使用的插件。java 插件提供了构建 Java 项目所需的功能,application 插件用于构建可执行的 Java 应用程序。
  • repositories 块: 定义依赖项的仓库。mavenCentral() 表示使用 Maven 中央仓库。
  • dependencies 块: 定义项目的依赖项。
    • testImplementation: 声明测试时依赖,例如测试框架(JUnit)。
    • implementation: 声明编译和运行时都需要的依赖,例如Google Guava库。
  • application 块: 配置应用程序的入口类。
  • java 块: 配置Java编译选项,例如设置源代码和目标代码的兼容性版本。

六、依赖管理

Gradle 的依赖管理功能非常强大,它可以自动解析和下载项目所需的依赖库。

1. 声明依赖项

dependencies 块中声明依赖项,格式为 configurationName group:name:versionconfigurationName("group:name:version")

  • configurationName: 依赖项的配置名称,例如 implementationtestImplementationcompileOnly 等。
  • group: 依赖项的组 ID。
  • name: 依赖项的名称。
  • version: 依赖项的版本号。

2. 依赖项配置

  • implementation: 编译和运行时都需要的依赖项。
  • testImplementation: 仅在测试时需要的依赖项。
  • compileOnly: 仅在编译时需要的依赖项,不会包含在运行时环境中。
  • runtimeOnly: 仅在运行时需要的依赖项。
  • annotationProcessor: 注解处理器。

3. 传递性依赖

Gradle 会自动解析依赖项的传递性依赖。例如,如果你的项目依赖 A,而 A 依赖 B,那么 Gradle 会自动下载 A 和 B。

4. 解决依赖冲突

当多个依赖项依赖同一个库的不同版本时,可能会出现依赖冲突。Gradle 提供了一些解决依赖冲突的机制:

  • 强制指定版本: 使用 force 关键字强制使用指定版本的依赖项。
  • 排除依赖: 使用 exclude 关键字排除某个依赖项的传递性依赖。

七、多项目构建

Gradle 可以轻松管理大型多项目构建。

1. 创建子项目

在根项目目录下创建子项目的目录。例如,创建一个名为 mylibrary 的子项目:

bash
mkdir mylibrary

2. 配置子项目

settings.gradle (或 settings.gradle.kts) 文件中添加子项目:

Groovy DSL (settings.gradle):

groovy
rootProject.name = 'my-gradle-project'
include 'mylibrary'

Kotlin DSL (settings.gradle.kts):

kotlin
rootProject.name = "my-gradle-project"
include("mylibrary")

3. 子项目的构建脚本

在子项目的目录下创建 build.gradle (或 build.gradle.kts) 文件,并编写构建逻辑。

4. 项目间依赖

在子项目的构建脚本中,可以使用 project(':projectName') 来引用其他子项目。例如,在 app 子项目中依赖 mylibrary 子项目:

Groovy DSL (app/build.gradle):

groovy
dependencies {
implementation project(':mylibrary')
}

Kotlin DSL (app/build.gradle.kts):

kotlin
dependencies {
implementation(project(":mylibrary"))
}

5. 构建多项目

在根项目目录下执行 ./gradlew build 命令,Gradle 会自动构建所有子项目。

八、Gradle Wrapper

Gradle Wrapper 是一个脚本,它可以让你在没有安装 Gradle 的环境下执行构建。使用 Gradle Wrapper 可以确保所有开发人员和构建服务器使用相同版本的 Gradle,避免因 Gradle 版本不同导致的问题。

1. 生成 Gradle Wrapper

使用 gradle wrapper 命令生成 Gradle Wrapper:

bash
gradle wrapper --gradle-version 8.5

指定你想要使用的Gradle版本

2. 使用 Gradle Wrapper

使用 ./gradlew 命令代替 gradle 命令执行构建任务。

九、高级特性

  • 自定义任务: 可以使用 Groovy 或 Kotlin 编写自定义任务,扩展 Gradle 的构建功能。
  • 插件开发: 可以开发自己的 Gradle 插件,并发布到 Gradle 插件仓库。
  • 构建缓存: Gradle 可以缓存构建任务的结果,加快后续构建的速度。
  • 增量构建: Gradle 可以只重新构建发生更改的部分,提高构建效率。
  • 并行执行: Gradle 可以并行执行多个任务,充分利用多核 CPU 的性能。
  • 复合构建: 允许将多个独立的构建组合在一起,作为一个整体进行构建。

十、总结

本教程介绍了 Gradle 的基本概念、安装方法、常用任务、构建脚本、依赖管理、多项目构建、Gradle Wrapper 以及一些高级特性。通过学习本教程,你应该能够使用 Gradle 构建简单的 Java 项目,并逐步掌握 Gradle 的更高级用法。建议你阅读 Gradle 官方文档(https://docs.gradle.org/)以获取更多信息。

希望这篇详细的 Gradle 入门教程对你有所帮助! 请记住,熟能生巧,多动手实践才能真正掌握 Gradle 的强大功能。从简单项目开始,逐步尝试更复杂的构建场景,你将会发现 Gradle 是一个非常强大且值得学习的构建工具。

THE END