“错误:无法确定所选 JDK 中的 Java VM 可执行文件”的原因是啥?
Posted
技术标签:
【中文标题】“错误:无法确定所选 JDK 中的 Java VM 可执行文件”的原因是啥?【英文标题】:What's the reason for "Error:Cannot determine Java VM executable in selected JDK"?“错误:无法确定所选 JDK 中的 Java VM 可执行文件”的原因是什么? 【发布时间】:2014-10-01 19:22:49 【问题描述】:我正在使用 IntelliJ IDEA 13.1.4 并且还尝试了最新版本 14。
运行 SBT 我收到以下错误:
Error:Cannot determine Java VM executable in selected JDK
我的机器和 PATH 上安装了 JDK 1.7。
在日志(MacOS 上的~/Library/Logs/IntelliJIdea14/idea.log
)中有以下堆栈跟踪:
2014-11-03 11:22:05,054 [4896641] WARN - nal.AbstractExternalSystemTask - Cannot determine Java VM executable in selected JDK
com.intellij.openapi.externalSystem.model.ExternalSystemException: Cannot determine Java VM executable in selected JDK
at org.jetbrains.sbt.project.SbtExternalSystemManager$$anonfun$10.apply(SbtExternalSystemManager.scala:97)
at org.jetbrains.sbt.project.SbtExternalSystemManager$$anonfun$10.apply(SbtExternalSystemManager.scala:97)
at scala.Option.getOrElse(Option.scala:120)
at org.jetbrains.sbt.project.SbtExternalSystemManager$.executionSettingsFor(SbtExternalSystemManager.scala:96)
at org.jetbrains.sbt.project.SbtExternalSystemManager$$anonfun$getExecutionSettingsProvider$1.apply(SbtExternalSystemManager.scala:54)
at org.jetbrains.sbt.project.SbtExternalSystemManager$$anonfun$getExecutionSettingsProvider$1.apply(SbtExternalSystemManager.scala:54)
at org.jetbrains.sbt.package$$anon$3.fun(package.scala:29)
at org.jetbrains.sbt.package$$anon$3.fun(package.scala:28)
at com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil.getExecutionSettings(ExternalSystemApiUtil.java:590)
at com.intellij.openapi.externalSystem.service.ExternalSystemFacadeManager.a(ExternalSystemFacadeManager.java:201)
at com.intellij.openapi.externalSystem.service.ExternalSystemFacadeManager.a(ExternalSystemFacadeManager.java:178)
at com.intellij.openapi.externalSystem.service.ExternalSystemFacadeManager.doInvoke(ExternalSystemFacadeManager.java:133)
at com.intellij.openapi.externalSystem.service.ExternalSystemFacadeManager$MyHandler.invoke(ExternalSystemFacadeManager.java:270)
at com.sun.proxy.$Proxy57.getResolver(Unknown Source)
at com.intellij.openapi.externalSystem.service.internal.ExternalSystemResolveProjectTask.doExecute(ExternalSystemResolveProjectTask.java:48)
at com.intellij.openapi.externalSystem.service.internal.AbstractExternalSystemTask.execute(AbstractExternalSystemTask.java:137)
at com.intellij.openapi.externalSystem.service.internal.AbstractExternalSystemTask.execute(AbstractExternalSystemTask.java:123)
at com.intellij.openapi.externalSystem.util.ExternalSystemUtil$2.execute(ExternalSystemUtil.java:475)
at com.intellij.openapi.externalSystem.util.ExternalSystemUtil$3$1.run(ExternalSystemUtil.java:543)
at com.intellij.openapi.progress.impl.ProgressManagerImpl$TaskRunnable.run(ProgressManagerImpl.java:609)
at com.intellij.openapi.progress.impl.ProgressManagerImpl$7.run(ProgressManagerImpl.java:410)
at com.intellij.openapi.progress.impl.ProgressManagerImpl$3.run(ProgressManagerImpl.java:194)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.a(ProgressManagerImpl.java:281)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:233)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.runProcess(ProgressManagerImpl.java:181)
at com.intellij.openapi.application.impl.ApplicationImpl$10$1.run(ApplicationImpl.java:640)
at com.intellij.openapi.application.impl.ApplicationImpl$8.run(ApplicationImpl.java:405)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
at org.jetbrains.ide.PooledThreadExecutor$1$1.run(PooledThreadExecutor.java:56)
这可能是什么原因?
【问题讨论】:
您很可能在Project SDK
中有 JRE 用于定义的项目。您能否检查相关项目的项目设置并查看项目下的设置?
我发现我需要按照in this answer 的描述使缓存无效。
【参考方案1】:
您应该能够通过从设置而不是从打开/导入项目对话框中设置 jdk 来解决它。
在欢迎屏幕中,转到 Configure -> Project defaults -> Project structure
并添加 jdk。
然后打开 sbt 项目应该可以正常工作了。
Found solution from here
【讨论】:
【参考方案2】:另一种设置 JDK 的方法是从您当前的模块/项目设置(针对您当前的项目)
从项目上下文菜单中选择Open Module Settings
(或默认按 F4), 然后从左侧选项卡中选择 Project
并在下拉菜单中指向正确的 Project SDK
。
【讨论】:
【参考方案3】:此问题通常是由“.idea/sbt.xml”中的JDK版本错误引起的,例如:
<option name="jdk" value="1.7" />
当项目 SDK 更改时,此选项不会相应更新,请参阅SCL-10085。如果您一般配置了其他 JDK(在我的示例中为 1.7),则不会出现错误,但 Project SDK 会默默改回。否则会出现此错误。
通过手动将“.idea/sbt.xml”中的值编辑为正确的JDK版本,可以轻松解决该问题。
【讨论】:
【参考方案4】:当您尝试在“SBT 任务”中进行刷新时也会出现同样的错误。
打开
Preferences -> Language & Frameworks -> Scala Compiler Server
开启
Run compile server (in external build mode)
完成刷新项目后,再次将其关闭以在您在编辑器中更改代码时启用热插拔。
【讨论】:
【参考方案5】:我必须打开Settings -> Language & Frameworks -> Scala Compiler Server
然后在那里设置JVM SDK,即<No SDK>
。
这是在 Project Structure -> Project
中设置项目 SDK 的补充。
请参阅screenshot here。
【讨论】:
【参考方案6】:IntelliJ 13.1.6 > 文件 > 项目结构 > 设置项目 SDK
【讨论】:
【参考方案7】:我从项目设置中删除 Java1.6 和 Java1.7 后遇到了同样的问题(默认为 Java8)。
最后我通过将 SBT JVM 配置更改为自定义 Java(设置 -> 构建、执行、部署 -> 构建工具 -> SBT)来解决问题。
【讨论】:
【参考方案8】:出于某种原因,上述建议对我没有帮助。但是,我确实发现在 Project Defaults > Project Structure(欢迎屏幕)下,我的默认 Project SDK 被设置为 Go SDK。
对我有用的是将此默认 SDK 设置为 Java JDK。
【讨论】:
【参考方案9】:对我来说,我在“打开模块设置”> 模块 > 依赖项 > 模块 SDK 中选择了 JDK。 但是,SBT 正在寻找在“打开模块设置”> 项目 > 项目 SDK 中设置的项目级别的 JDK,正如@michasm 上面指出的那样
【讨论】:
【参考方案10】:Scala 插件的latest Nightlies 更改了项目 JDK 的设置方式,在大多数情况下应该可以解决这个问题。让我知道它是否在某些情况下仍然中断。
【讨论】:
【参考方案11】:当我的主要模块的项目 SDK 是 Python 并且我试图添加一个作为 JDK 的辅助模块(导入 sbt 项目)时,这发生在我的多语言项目中。
为了添加 sbt 模块,我不得不暂时将主模块的 Project SDK 切换到 JDK。然后我能够返回并将每个模块更改为正确的 SDK。
【讨论】:
以上是关于“错误:无法确定所选 JDK 中的 Java VM 可执行文件”的原因是啥?的主要内容,如果未能解决你的问题,请参考以下文章