“错误:无法确定所选 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 -&gt; Language &amp; Frameworks -&gt; Scala Compiler Server

然后在那里设置JVM SDK,即&lt;No SDK&gt;

这是在 Project Structure -&gt; 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 可执行文件”的原因是啥?的主要内容,如果未能解决你的问题,请参考以下文章