Eclipse Gradle报错:Could not find or load main class cacerts
问题原因
这个报错是Eclipse的Gradle插件传参bug导致的:插件生成Gradle守护进程启动命令时,没有正确转义JDK路径里的空格。
你看报错里的启动命令,虽然给-Djavax.net.ssl.trustStore参数值加了双引号包裹C:\Program Files\OpenJdk11\lib\security\cacerts路径,但插件实际把参数传给JVM时引号没生效,路径从Program Files的空格处被截断,后半段Files\OpenJdk11\lib\security\cacerts被JVM识别成要加载的主类名,自然抛出类找不到的错误。
命令行执行构建正常,是因为系统终端本身能正确识别带引号的空格路径,不存在Eclipse插件的传参转义问题。
解决办法
选任意一种方案操作即可:
- 更换JDK安装路径
把当前装在C:\Program Files\目录下的OpenJDK11移动到不带空格的路径,比如C:\tools\OpenJdk11,之后打开Eclipse的Gradle配置页,把Gradle运行依赖的JRE路径改成新的无空格JDK路径,重启Eclipse后重新刷新Gradle依赖就正常了。 - 用Windows短路径格式配置JVM参数
打开Eclipse的Gradle配置页,找到Gradle启动的VM参数配置项,把trustStore路径替换成Windows短路径格式,也就是将对应参数修改为-Djavax.net.ssl.trustStore=C:\Progra~1\OpenJdk11\lib\security\cacerts,保存后重启Eclipse刷新依赖即可,不需要挪动JDK位置。 - 调整Gradle运行时配置
把Eclipse里的Gradle运行模式改成使用项目自带的Gradle Wrapper,同时手动给Gradle配置无空格路径的JAVA_HOME,不要让插件自动读取Program Files下的系统JDK路径,从根源上避免空格路径解析问题。
改完配置后先执行
gradle --stop命令停掉所有残留的Gradle守护进程,再做依赖刷新,避免旧进程的错误缓存干扰结果。
内容的提问来源于stack exchange,提问作者Ravi
相关产品推荐
相关产品推荐

