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
相关产品推荐
相关产品推荐

