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

求助:Gradle自定义任务无法同时启动三个Spring Boot应用

这个问题我之前也碰到过,核心原因有两个:一是你重复调用dependsOn导致依赖被覆盖,二是bootRun默认是阻塞式任务,会卡住后续执行。咱们一步步解决:

1. 修复dependsOn的覆盖问题

Gradle中如果多次调用dependsOn,后面的调用会直接替换掉前面的依赖列表,而不是追加。所以你原来的代码最后只会保留modules::module_3::bootRun这一个依赖。

你可以用下面两种方式修复:

  • 一次性传递所有依赖到dependsOn:
task startApps(type: Exec) {
    dependsOn 'modules::module_1::bootRun', 'modules::module_2::bootRun', 'modules::module_3::bootRun'
}
  • 或者用add()方法逐个追加依赖(适合有条件判断的场景):
task startApps(type: Exec) {
    dependsOn.add('modules::module_1::bootRun')
    dependsOn.add('modules::module_2::bootRun')
    dependsOn.add('modules::module_3::bootRun')
}

2. 解决bootRun的阻塞问题

就算你修复了依赖问题,直接运行还是只能启动第一个应用——因为bootRun默认是阻塞式任务,启动后会一直占用进程,Gradle要等它结束才会执行下一个任务。

解决办法是让每个bootRun在独立的后台进程中运行,只需要给每个模块的bootRun任务开启fork模式:

  • 方案一:在每个模块的build.gradle中配置:
bootRun {
    fork = true
    // 可选:添加JVM参数
    jvmArgs = ['-Dspring.profiles.active=dev']
}
  • 方案二:如果不想修改每个模块的配置,可以在根项目的自定义任务中动态设置:
task startApps {
    dependsOn ['modules::module_1::bootRun', 'modules::module_2::bootRun', 'modules::module_3::bootRun']
    
    doFirst {
        // 为每个bootRun任务开启fork模式
        project(':modules:module_1').tasks.bootRun.fork = true
        project(':modules:module_2').tasks.bootRun.fork = true
        project(':modules:module_3').tasks.bootRun.fork = true
    }
}

这样配置后,运行./gradlew startApps就能同时启动三个Spring Boot应用了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:23:13