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'
}
从上面可以看到,脚本由三个主要代码块组成:plugins
、repositories
和 dependencies
。
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 |
仅测试运行期有效 |
⚠️ 注意:compile
、testCompile
、runtime
、testRuntime
等配置已被弃用,虽然目前仍可用,建议迁移到新版配置。
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