You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gradle循环依赖排查:无明显依赖循环却报错求解

问题

我有三个Gradle模块:

  • main-data:无内部项目依赖
  • vendor-data:依赖:app-main-data
  • invoice-data:同时依赖:app-main-data和:app-modules:vendors:data

构建时出现compileJava与compileKotlin任务的循环依赖错误,但移除vendor-data依赖后构建正常,需要排查问题原因。

相关配置

main-data的build.gradle

dependencies {
    implementation("org.postgresql:postgresql:${Versions.postgresVersion}")
    implementation("com.zaxxer:HikariCP:${Versions.hikariVersion}")
}

// To run: ./gradlew flywayMigrate
flyway {
    url = "jdbc:postgresql://localhost:5432/app"
    user = "app"
    password = "app"
    validateOnMigrate = false
}

vendor-data的build.gradle

dependencies {
    implementation(project(":app-main-data"))
}

invoice-data的build.gradle

dependencies {
    implementation(project(":app-main-data"))
    implementation(project(":app-modules:vendors:data"))
}

settings.gradle配置

include(
    ":app-main",
    ":app-main-data",
)


include(
    ":app-modules:vendors:data",
)

include(
    ":app-modules:invoices:api",
    ":app-modules:invoices:data",
)

报错信息

FAILURE: Build failed with an exception.

* What went wrong:
Circular dependency between the following tasks:
:app-modules:invoices:data:compileJava
+--- :app-modules:invoices:data:compileJava (*)
\--- :app-modules:invoices:data:compileKotlin
     +--- :app-modules:invoices:data:compileJava (*)
     \--- :app-modules:invoices:data:compileKotlin (*)

(*) - details omitted (listed previously)

排查与解决方案

报错显示循环依赖发生在invoice-data模块自身的compileJava和compileKotlin任务之间,而非跨模块依赖循环。移除vendor-data依赖后构建正常,说明问题与该依赖引入的配置或插件关联,具体排查方向及解决办法如下:

  1. Kotlin与Java插件的任务冲突

    • 检查invoice-data和vendor-data模块是否同时应用java和kotlin插件,且插件版本不一致。Gradle中同时使用这两个插件时,配置不当会导致编译任务互相依赖。
    • 解决:所有模块统一使用相同版本的Kotlin插件;优先应用kotlin("jvm")插件,再应用java插件,或直接用kotlin("jvm")替代单独的java插件。
  2. Flyway插件的传递性配置问题

    • main-data配置了Flyway插件,若该插件通过依赖传递被误应用到invoice-data模块,可能干扰编译任务的依赖链,触发循环。
    • 解决:将Flyway插件的应用范围限制在main-data模块,避免传递给其他模块。修改main-data的build.gradle:
      plugins {
          id 'java'
          id 'org.flywaydb.flyway' apply false
      }
      
      apply plugin: 'org.flywaydb.flyway'
      
  3. 模块路径引用不一致

    • 检查settings.gradle中模块路径与依赖引用的一致性,注意大小写(Linux/macOS下路径大小写敏感),避免拼写错误。
    • 解决:统一使用settings.gradle中定义的完整模块路径引用依赖。
  4. 自定义编译任务的依赖错误

    • 排查是否存在自定义Gradle任务或配置修改了compileJava/compileKotlin的依赖关系,导致任务互相依赖。
    • 解决:移除或修正自定义配置,确保compileKotlin仅依赖上游前置任务,而非与compileJava形成循环。

内容的提问来源于stack exchange,提问作者Whizzil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 13:40:33