如何创建Gradle的dev任务并发执行两个服务启动任务?
解决Gradle同时启动两个长运行服务任务的问题
直接让dev任务依赖frontendDevServer和内置run任务时,Gradle会串行执行任务——由于run是永远不会终止的长运行任务,另一个任务根本没机会启动。下面提供两种可行的解决方案:
方案一:启用Gradle并行构建
通过全局配置让Gradle并行执行任务,无需修改任务逻辑:
- 在
settings.gradle.kts中开启并行支持:
rootProject.name = "你的项目名称" enableFeaturePreview("TASK_PROJECT_PARALLELISM") org.gradle.parallel = true
- 定义
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
相关产品推荐
相关产品推荐

