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

Gradle构建SpringBoot应用添加@Async后bootRun启动失败(错误206)

解决Spring Boot + Gradle启动时CreateProcess error=206(文件名/扩展名过长)的问题

这个报错本质是Windows系统的命令行参数长度限制在搞事情,和你引入@Async的Executor服务只是巧合关联——大概率是引入@Async后,项目依赖总数增加,导致Gradle的bootRun命令传递给Java进程的classpath参数长度超过了Windows的默认限制(通常是8191字符),才触发了这个错误。下面给你几个靠谱的解决方案:

方案1:打包成可执行JAR后运行(最推荐)

Gradle的bootRun会把所有依赖的JAR路径直接拼在命令行的classpath里,很容易超限;但打包成可执行JAR后,Java会通过JAR内部的MANIFEST.MF文件来管理依赖路径,不会有命令行长度问题。步骤很简单:

  • 先执行打包命令:
    gradlew.bat bootJar
    
  • 找到build/libs目录下生成的可执行JAR,用Java命令启动:
    java -jar build/libs/你的应用名称.jar
    

方案2:修改bootRun配置,用Manifest传递classpath

如果你还是想直接用bootRun启动,可以在build.gradle中添加配置,让Gradle生成一个包含classpath信息的Manifest文件,避免把所有依赖路径都写在命令行里:

bootRun {
    // 保留你原有的jvmArgs配置(如果有的话)
    // jvmArgs = ['-Dsome.property=value']
    
    doFirst {
        // 生成临时的Manifest文件,包含所有依赖的classpath
        def manifest = new Manifest()
        manifest.mainAttributes.put(
            Attributes.Name.CLASS_PATH,
            sourceSets.main.runtimeClasspath.files.collect { it.absolutePath }.join(' ')
        )
        def tempJar = file("$buildDir/tmp/bootRunManifest.jar")
        tempJar.parentFile.mkdirs()
        new JarOutputStream(new FileOutputStream(tempJar), manifest).close()
        
        // 将临时Manifest Jar加入classpath,让Java通过它加载依赖
        classpath = files(tempJar) + classpath
    }
}

修改后再执行gradlew.bat bootRun,应该就能正常启动了。

方案3:精简项目依赖

检查一下引入@Async后是不是意外拉了很多不必要的依赖——比如有没有误引入Spring Cloud这类大体积的依赖包。你可以用下面的命令查看完整依赖树,找出可以排除的冗余依赖:

gradlew.bat dependencies

通过exclude语法移除不需要的依赖,也能有效缩短classpath的长度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 21:17:32