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

如何创建Gradle的dev任务并发执行两个服务启动任务?

解决Gradle同时启动两个长运行服务任务的问题

直接让dev任务依赖frontendDevServer和内置run任务时,Gradle会串行执行任务——由于run是永远不会终止的长运行任务,另一个任务根本没机会启动。下面提供两种可行的解决方案:

方案一:启用Gradle并行构建

通过全局配置让Gradle并行执行任务,无需修改任务逻辑:

  1. 在settings.gradle.kts中开启并行支持:
rootProject.name = "你的项目名称"
enableFeaturePreview("TASK_PROJECT_PARALLELISM")
org.gradle.parallel = true
  1. 定义dev任务并依赖两个服务任务:
tasks.register("dev") {
    dependsOn("frontendDevServer", "run")
}

执行./gradlew dev时,两个任务会同时启动运行。

方案二:自定义任务手动启动双进程

如果不想全局开启并行,可通过自定义任务直接启动两个进程,更灵活可控:

tasks.register("dev") {
    doLast {
        // 启动前端开发服务器
        val frontendProcess = ProcessBuilder("npm", "run", "dev")
            .directory(file("src/frontend"))
            .inheritIO() // 将进程输出同步到控制台
            .start()

        // 基于内置run任务的配置启动后端服务
        val runTask = tasks.named<JavaExec>("run").get()
        val runProcess = ProcessBuilder(runTask.commandLine.toList())
            .directory(runTask.workingDir)
            .apply { environment().putAll(runTask.environment) }
            .inheritIO()
            .start()

        // 等待两个进程结束,任务会持续运行直到用户按Ctrl+C终止
        frontendProcess.waitFor()
        runProcess.waitFor()
    }
}

注意事项

  • 两种方案下,按下Ctrl+C都会同时终止两个服务进程;
  • 方案一中需确保两个任务不存在资源竞争(比如端口冲突),否则会导致启动失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 19:52:44