IDEA工具使用之启动项目失败且无日志打印

发布于:2025-03-25 ⋅ 阅读:(28) ⋅ 点赞:(0)

问题描述

  • 概述

新拉取的项目,基于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>


这会启用动态类路径加载,避免一次性传递所有依赖路径。

方案二:修改启动配置

  1. 打开 Run/Debug Configurations

  2. 找到你的启动配置

  3. 在 VM options 中添加:


-Didea.classpath.use.jars=true


  1. 在 Shorten command line 选项中选择:

JAR manifest(推荐)或 classpath file

  • 具体如图

idea启动失败配置

总结

Windows 的 CreateProcess API 对命令行长度有限制:

传统限制:8191 字符(cmd.exe)

系统限制:32767 字符(Win10 1607+)

当类路径包含大量依赖时(特别是Spring Boot项目),很容易超出限制。

最终,采用方案二解决。


网站公告

今日签到

点亮在社区的每一天
去签到