Gradle多项目中子项目依赖须用project(':name')声明而非Maven坐标。需在settings.gradle中include子项目,各子项目启用java或java-library插件,并确保模块名与include一致,避免循环依赖和路径错误。

在 Gradle 多项目构建中,Java 子项目之间的依赖关系通过 项目依赖(project dependency) 声明,而不是用坐标引入外部库。核心是让子模块能正确编译、测试并复用其他子模块的代码。
1. 正确配置多项目结构
确保根目录下有 settings.gradle(或 settings.gradle.kts),显式包含所有子项目:
include ':common', ':api', ':service'
project(':common').projectDir = new File('modules/common')
project(':api').projectDir = new File('modules/api')子项目目录下必须有各自的 build.gradle(或 build.gradle.kts),且一般使用 Java 插件:
// modules/common/build.gradle
plugins {
id 'java'
}2. 在子项目中声明对其他子项目的依赖
在需要依赖别的模块的 build.gradle 里,用 implementation project(':模块名'):
立即学习“Java免费学习笔记(深入)”;
// modules/service/build.gradle
dependencies {
implementation project(':common') // 编译 + 运行时依赖
runtimeOnly project(':api') // 仅运行时需要(少见,慎用)
testImplementation project(':common') // 测试代码依赖 common
}注意:
- 不要写成 implementation 'com.example:common:1.0'(那是 Maven 坐标,不适用于本地子项目)
- 模块名必须和 settings.gradle 中 include 的名称完全一致(包括冒号前缀)
3. 确保被依赖模块输出可用
默认情况下,Java 插件会生成 jar,但子项目依赖直接走编译类路径(classpath),不经过打包解包。只要被依赖模块有 java 插件且源码正常,Gradle 会自动处理内部类路径传递。
如果被依赖模块还提供了 API/implementation 分离(如使用 java-library 插件),可更精准控制可见性:
// modules/common/build.gradle
plugins { id 'java-library' }
// 其他模块用 implementation project(':common') 时,
// 只能看到 common 的 api 依赖和 public API 类4. 避免常见错误
- 循环依赖:A 依赖 B,B 又依赖 A → Gradle 会报错,需重构模块职责
-
路径拼写不一致:
include ':utils'但写成project(':util')→ 找不到项目 -
忘记应用 Java 插件:子项目没加
id 'java'→ 无法参与编译依赖解析 -
在根项目中错误声明子项目依赖:根项目的
build.gradle不该写implementation project(...),它不参与编译逻辑


















