1. 概述

在本篇文章中,我们将深入探讨如何在 Gradle 构建脚本中声明依赖项。示例将基于 Gradle 6.7 版本。

2. 典型结构

先来看一个典型的 Java 项目 Gradle 脚本:

plugins {
    id 'java'
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter:2.3.4.RELEASE'
    testImplementation 'org.springframework.boot:spring-boot-starter-test:2.3.4.RELEASE'
}

从上面可以看到,脚本由三个主要代码块组成:pluginsrepositoriesdependencies

  • plugins 声明了这是一个 Java 项目;
  • dependencies 声明了两个依赖项:
    • implementation 表示用于编译生产代码的依赖;
    • testImplementation 表示测试代码所需的依赖;
  • repositories 指定依赖来源,这里是 Maven Central。

接下来我们重点看看依赖是如何声明和管理的。

3. 依赖配置

Gradle 提供了多种依赖配置方式,不同的配置决定了依赖的作用域和可见性。

3.1. 依赖声明格式

依赖声明通常由以下四个部分组成:

  • group:组织、公司或项目的标识符;
  • name:依赖项的名称;
  • version:版本号;
  • classifier(可选):用于区分相同 group、name、version 的依赖。

依赖可以以两种方式声明:

字符串格式(推荐)

implementation 'org.springframework.boot:spring-boot-starter:2.3.4.RELEASE'

Map 格式

implementation group: 'org.springframework.boot', name: 'spring-boot-starter', version: '2.3.4.RELEASE'

3.2. 配置类型详解

Gradle 提供了多种依赖配置类型,每种都有特定用途:

配置类型 用途说明
api 用于库项目,暴露依赖给消费者
implementation 编译生产代码所需,仅限内部使用 ✅ 推荐
compileOnly 仅编译期有效,如注解处理器
compileOnlyApi 同上,但对消费者可见
runtimeOnly 仅运行期需要
testImplementation 编译测试代码所需 ✅ 推荐
testCompileOnly 仅测试编译期有效
testRuntimeOnly 仅测试运行期有效

⚠️ 注意:compiletestCompileruntimetestRuntime 等配置已被弃用,虽然目前仍可用,建议迁移到新版配置。

4. 外部依赖类型

在 Gradle 中,我们可以引用不同类型的外部依赖。

4.1. 模块依赖(Module Dependencies)

这是最常见的依赖形式,通过 Maven、JCenter 等仓库拉取依赖:

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter:2.3.4.RELEASE'
}

4.2. 文件依赖(File Dependencies)

当项目不使用远程仓库时,也可以直接引用本地文件:

✅ 使用 files 引用多个 jar 文件:

dependencies {
    runtimeOnly files('libs/lib1.jar', 'libs/lib2.jar')
}

✅ 使用 fileTree 批量引入目录下所有 jar:

dependencies {
    runtimeOnly fileTree('libs') { include '*.jar' }
}

4.3. 项目依赖(Project Dependencies)

当一个项目依赖另一个本地项目时,可以这样声明:

dependencies { 
    implementation project(':shared') 
}

4.4. Gradle API 依赖

在开发 Gradle 插件或自定义任务时,可以引用 Gradle 提供的 API:

dependencies {
    implementation gradleApi()
}

5. buildScript 块

前面提到的 dependencies 块是用于项目源码和测试的依赖。而 buildScript 块则用于声明 Gradle 构建脚本本身所需的依赖,比如第三方插件:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'org.springframework.boot:spring-boot-gradle-plugin:2.3.4.RELEASE' 
    }
}
apply plugin: 'org.springframework.boot'

⚠️ 注意:buildScript 中必须手动指定仓库,没有默认值。

不过,在 Gradle 新版本中,可以直接使用更简洁的插件 DSL:

plugins {
    id 'org.springframework.boot' version '2.3.4.RELEASE'
}

这种方式更清晰、更现代,推荐优先使用。

6. 总结

本文系统介绍了 Gradle 中依赖管理的核心概念和使用方式,包括:

  • 依赖的声明格式(字符串 vs Map);
  • 各种依赖配置(implementation、api、testImplementation 等);
  • 不同依赖类型(模块、文件、项目、Gradle API);
  • buildScript 的使用与插件声明方式。

✅ 掌握这些知识,你就能轻松应对大多数 Gradle 依赖管理场景。

示例代码可在 GitHub 获取:https://github.com/eugenp/tutorials/tree/master/gradle-modules/gradle/gradle-dependency-management


原始标题:Dependency Management in Gradle