Idea启动报错,Command line is too long异常

问题描述

在使用idea启动Springboot项目,报错Command line is too long,如下图
报错提示

解决

按照如下修改,Edit Configurations->shorten command line->选择JAR manifest

Edit Configurations

shorten command line
三个选项的意思分别是

  • none:这是默认选项。IDE不会缩短长类路径,如果命令行超出操作系统限制,则IDEA将无法运行您的应用程序
  • JAR manifest:IDE通过临时classpath.jar传递长类路径,原始类路径在MANIFEST.MF中定义为classpath.jar中的类路径属性
  • classpath file:IDE将把长类路径写入文本文件

按照上边修改后,只是在当前启动的类上做了配置(如上图,我的只是在App类生效),如果更换了启动类,可能还会报错,所以可以修改一下模板配置,之后启动Springboot类时默认使用如上配置。
Edit Configurations->Edit configuration templates


这样配置后,之后再启动其他类,也就不会再报错啦!

知其然,知其所以然

原因分析

出现此问题的直接原因是:IDEA集成开发环境运行你的源码的时候(注意是源码基础上运行,并非打好的jar包哦),是通过命令(首行那个非常非常长的)来启动Java进程的。
这个命令主要包含两大部分

  • VM/程序参数:也就是你看到的那些-XX -D等参数,这部分理论上可以无限长但实际上一般不会太长。
  • -classpath参数:它用于指定运行时jar包路径(因为jar包理论上是可以在任何地方的),这部分可能性就多了。

关键就在于-classpath参数,它可以非常长,你依赖的jar包越多此路径就越长;你的base基路径越长它就越长;倘若你还要做复杂的Junit单元测试,那加入的jar包就更多长度可能就越长喽。总的来说:此part是很有可能超长从而导致Command line is too long现象的。
如果类路径太长(可能性大),或者您有许多VM参数(可能性小),则无法启动该程序。原因是大多数操作系统都有命令行长度限制。在这种情况下,IntelliJ IDEA将提供尝试缩短类路径的能力。

参考资料

https://blog.csdn.net/Numb_ZL/article/details/124024582