IDEA工具使用之启动项目失败且无日志打印
问题描述
- 概述
新拉取的项目,基于IDEA本地调试启动失败,控制台也没有跳转打印出日志,点击完RUN/DEBUG图标后,项目默认没有任何反映。
原因分析
- 环境配置
项目日志配置控制台打印,配置文件访问数据库等正常。
- 日志排查
只能考虑查找IDEA启动日志排查问题。
IDEA日志目录:
C:\Users\<你的用户名>\AppData\Local\JetBrains\Idea版本目录\log
找到idea.log文件找到最新报错信息:
2025-03-24 17:34:02,728 [2276935] INFO - #c.i.c.i.CompilerUtil - COMPILATION FINISHED (BUILD PROCESS); Errors: 0; warnings: 2 took 23787 ms: 0 min 23sec
2025-03-24 17:34:02,801 [2277008] INFO - #c.i.e.r.ExecutionUtil - Error running <a href="edit">ApplicationStarter</a>. Command line is too long.<br/>Shorten the command line via <a href="jar">JAR manifest</a> or via a <a href="classfile">classpath file</a> and rerun.
com.intellij.execution.process.ProcessNotCreatedException: Cannot run program "D:\Dev\Java\JDK\jdk1.8.0_30\bin\java.exe" (in directory "D:\Dev\Java\CharlesYan\IdeaProjects\xxxx\nbsp"): CreateProcess error=206, 文件名或扩展名太长。
at com.intellij.execution.configurations.GeneralCommandLine.createProcess(GeneralCommandLine.java:384)
at com.intellij.execution.target.local.LocalTargetEnvironment.createProcess(LocalTargetEnvironment.java:130)
at com.intellij.execution.application.BaseJavaApplicationCommandLineState.startProcess(BaseJavaApplicationCommandLineState.java:77)
at com.intellij.execution.application.ApplicationCommandLineState.startProcess(ApplicationCommandLineState.java:96)
at com.intellij.execution.application.ApplicationCommandLineState.startProcess(ApplicationCommandLineState.java:29)
at com.intellij.execution.configurations.CommandLineState.execute(CommandLineState.java:61)
at com.intellij.spring.boot.run.SpringBootCommandLineState.execute(SpringBootCommandLineState.java:72)
at com.intellij.execution.impl.DefaultJavaProgramRunner.executeJavaState(DefaultJavaProgramRunner.java:188)
at com.intellij.execution.impl.DefaultJavaProgramRunner.lambda$doExecuteAsync$5(DefaultJavaProgramRunner.java:172)
at com.intellij.execution.target.TargetEnvironmentAwareRunProfileState$1.run(TargetEnvironmentAwareRunProfileState.java:58)
at com.intellij.openapi.progress.impl.CoreProgressManager.startTask(CoreProgressManager.java:491)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.startTask(ProgressManagerImpl.java:133)
at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcessWithProgressAsynchronously$7(CoreProgressManager.java:542)
at com.intellij.openapi.progress.impl.ProgressRunner.lambda$submit$4(ProgressRunner.java:249)
at com.intellij.openapi.progress.ProgressManager.lambda$runProcess$0(ProgressManager.java:98)
at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$1(CoreProgressManager.java:223)
at com.intellij.platform.diagnostic.telemetry.helpers.TraceKt.use(trace.kt:45)
at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$2(CoreProgressManager.java:222)
at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeProcessUnderProgress$14(CoreProgressManager.java:674)
at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:749)
at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:705)
at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:673)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:79)
at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:203)
at com.intellij.openapi.progress.ProgressManager.runProcess(ProgressManager.java:98)
at com.intellij.openapi.progress.impl.ProgressRunner.lambda$submit$5(ProgressRunner.java:249)
at com.intellij.openapi.progress.impl.ProgressRunner$ProgressRunnable.run(ProgressRunner.java:502)
at com.intellij.openapi.progress.impl.ProgressRunner.lambda$launchTask$18(ProgressRunner.java:467)
at com.intellij.util.concurrency.ChildContext$runInChildContext$1.invoke(propagation.kt:101)
at com.intellij.util.concurrency.ChildContext$runInChildContext$1.invoke(propagation.kt:101)
at com.intellij.util.concurrency.ChildContext.runInChildContext(propagation.kt:107)
at com.intellij.util.concurrency.ChildContext.runInChildContext(propagation.kt:101)
at com.intellij.openapi.progress.impl.ProgressRunner.lambda$launchTask$19(ProgressRunner.java:463)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:735)
at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:732)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:400)
at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1.run(Executors.java:732)
at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: java.io.IOException: Cannot run program "D:\Dev\Java\JDK\jdk1.8.0_30\bin\java.exe" (in directory "D:\Dev\Java\CharlesYan\IdeaProjects\xxxx\nbsp"): CreateProcess error=206, 文件名或扩展名太长。
at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1170)
at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1089)
at com.intellij.execution.configurations.GeneralCommandLine.createProcess(GeneralCommandLine.java:463)
at com.intellij.execution.configurations.GeneralCommandLine.startProcess(GeneralCommandLine.java:469)
at com.intellij.execution.configurations.GeneralCommandLine.createProcess(GeneralCommandLine.java:374)
... 39 more
Caused by: java.io.IOException: CreateProcess error=206, 文件名或扩展名太长。
at java.base/java.lang.ProcessImpl.create(Native Method)
at java.base/java.lang.ProcessImpl.<init>(ProcessImpl.java:500)
at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:159)
at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1126)
... 43 more
这个错误是由于 Windows 系统对命令行长度有限制(默认 32767 个字符),当 IDEA 启动项目时生成的类路径(Classpath)过长导致的。
解决方案
方案一:使用类路径缩短方案(推荐)
在项目的 .idea/workspace.xml 中添加以下配置:
<component name="PropertiesComponent">
<property name="dynamic.classpath" value="true" />
</component>
这会启用动态类路径加载,避免一次性传递所有依赖路径。
方案二:修改启动配置
打开 Run/Debug Configurations
找到你的启动配置
在 VM options 中添加:
-Didea.classpath.use.jars=true
- 在 Shorten command line 选项中选择:
JAR manifest(推荐)或 classpath file
- 具体如图
总结
Windows 的 CreateProcess API 对命令行长度有限制:
传统限制:8191 字符(cmd.exe)
系统限制:32767 字符(Win10 1607+)
当类路径包含大量依赖时(特别是Spring Boot项目),很容易超出限制。
最终,采用方案二解决。