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

Gradle构建中spring-boot-starter-webflux依赖问题排查求助

解决Gradle多模块项目中WebFlux依赖导致的Lint错误

你遇到的问题核心是依赖冲突和Gradle Lint插件的误判:spring-boot-starter-webflux会间接引入jakarta.annotation-api,而父模块Par已经显式声明了javax.annotation-api——这两个包是Java EE到Jakarta EE迁移的产物,类完全重复,触发了Lint的重复依赖检测;同时Lint还误判了部分依赖未声明或未使用。

下面是一步步的解决方案:

1. 排除WebFlux中的Jakarta依赖

首先在Child模块的spring-boot-starter-webflux依赖中排除jakarta.annotation-api,让整个项目统一使用父模块的javax.annotation-api版本,彻底解决重复依赖问题。

修改Child模块build.gradle中的webflux依赖:

compile group: 'org.springframework.boot', name: 'spring-boot-starter-webflux', version: versions.spring_boot, {
    exclude group: 'jakarta.annotation', module: 'jakarta.annotation-api'
}

2. 处理Lint的误报问题

排除Jakarta依赖后,Lint可能还会报undeclared-dependency或unused-dependency错误,这是插件对WebFlux的依赖结构判断有误。你可以在Child模块的gradleLint.ignore块中添加规则忽略这些误报:

gradleLint.ignore {
    // 忽略webflux的未使用依赖误报
    unused-dependency 'org.springframework.boot:spring-boot-starter-webflux'
    // 如果仍有undeclared错误,添加这条规则
    undeclared-dependency 'jakarta.annotation:jakarta.annotation-api'
}

3. 验证依赖树(可选但推荐)

执行以下命令查看Child模块的依赖树,确认jakarta.annotation-api已经被排除,只有javax.annotation-api存在:

gradle :Child:dependencies

这能帮你确认依赖冲突已经彻底解决。

完整修改后的Child模块依赖示例

调整后的Child模块dependencies节点完整代码:

dependencies {
    compile nerv('grpc-helpers-java', versions.grpc_helpers_java)
    compile group: 'org.springframework', name: 'spring-core', version: versions.spring
    compile group: 'org.springframework', name: 'spring-beans', version: versions.spring
    compile group: 'org.springframework', name: 'spring-context', version: versions.spring
    compile group: 'org.springframework', name: 'spring-web', version: versions.spring
    compile group: 'com.fasterxml.jackson.core', name: 'jackson-annotations', version:'2.10.5'
    compile group: 'com.fasterxml.jackson.core',name:'jackson-core', version:'2.10.5'
    compile group: 'com.fasterxml.jackson.core', name:'jackson-databind', version:'2.10.5'
    compile group: 'org.slf4j', name: 'slf4j-api', version: versions.slf4j
    // 排除jakarta依赖,统一使用javax版本
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-webflux', version: versions.spring_boot, {
        exclude group: 'jakarta.annotation', module: 'jakarta.annotation-api'
    }
    runtime group: 'org.slf4j', name: 'slf4j-log4j12', version: versions.slf4j

    gradleLint.ignore {
        // 保留原有的spring-web忽略规则
        compile group: 'org.springframework', name: 'spring-web', version: versions.spring
        // 添加webflux的未使用依赖忽略
        unused-dependency 'org.springframework.boot:spring-boot-starter-webflux'
    }
}

这样调整后,父模块的lintGradle任务应该能正常通过,同时Child模块的WebClient也能正常使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 22:42:41