Grails3.3.10添加Spring Security插件后启动报CreateProcess error=206
解决Grails启动时CreateProcess error=206(文件名/扩展名过长)的方案
这个错误是Windows系统的限制导致的:CreateProcess调用支持的命令行长度上限为8191字符,添加Spring Security相关依赖后,项目classpath条目过多,总长度超出了这个限制。以下是可行的解决办法:
启用Gradle Windows短命令行模式
在项目根目录的gradle.properties文件中添加配置,让Gradle自动处理长classpath:org.gradle.project.windowsShortenCommandLine=on或者在
build.gradle中直接配置JavaExec任务:tasks.withType(JavaExec) { if (org.gradle.internal.os.OperatingSystem.current().isWindows()) { commandLine = ['cmd', '/c', 'java', '-cp', classpath.asPath] + jvmArgs + args } }缩短项目路径
将项目所在的长路径(比如D:\myprojectfolder)改为更短的路径,例如D:\proj,减少路径本身占用的字符数,间接降低classpath总长度。精简依赖
检查build.gradle中的依赖,移除不必要的依赖项;将仅编译时需要的依赖从compile改为provided范围,减少运行时classpath的条目数量。比如:// 原依赖 compile 'some-dependency:1.0.0' // 修改为仅编译时依赖 provided 'some-dependency:1.0.0'使用@argfile传递classpath
把classpath写入一个文本文件,通过Java的@argfile参数加载,避免命令行过长。在build.gradle中添加以下配置:task createClasspathFile { doLast { file("classpath.txt").text = sourceSets.main.runtimeClasspath.join(System.getProperty("path.separator")) } } bootRun.dependsOn createClasspathFile tasks.withType(JavaExec) { if (org.gradle.internal.os.OperatingSystem.current().isWindows()) { args = ["@classpath.txt"] + args classpath = files() // 清空原classpath,避免重复加载 } }升级Gradle版本
Grails 3.3.10默认的Gradle版本对长路径的支持有限,升级到兼容的高版本Gradle(比如4.10.3),新版本会优化classpath的处理方式。修改gradle/wrapper/gradle-wrapper.properties中的distributionUrl:distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.3-all.zip
内容的提问来源于stack exchange,提问作者Deepak Gupta
相关产品推荐
相关产品推荐

