“错误: 无法确定所选 JDK 中的 JavaVM 可执行文件”的原因是什么?

我正在使用 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)

为什么会这样?

41509 次浏览

您应该能够通过设置 jdk 而不是通过打开/导入项目对话框来解决这个问题。

从欢迎屏幕转到 Configure -> Project defaults -> Project structure并添加 jdk。

enter image description here

那么开放 sbt 项目应该会很有效。

在这里找到了解决办法

另一种设置 JDK 的方法是从当前模块/项目设置(针对当前项目)

从项目上下文菜单中选择 Open Module Settings(或默认命中 F4) ,< br > 然后从左边选项卡中选择 Project并在下拉菜单中指向正确的 Project SDK

enter image description here

对我来说,我在“ Open Module Settings”> Module > Dependency > Module SDK 中选择了 JDK。 然而,SBT 正在寻找项目级的 JDK,它设置在“开放模块设置”> 项目 > 项目 SDK 中,正如@michast 上面指出的那样

在“ SBT 任务”中尝试刷新时也会发生同样的错误。

张嘴

Preferences -> Language & Frameworks -> Scala Compiler Server

打开

Run compile server (in external build mode)

刷新完项目之后,再次关闭它,以便在编辑器中更改代码时启用热交换。

我不得不打开 Settings -> Language & Frameworks -> Scala Compiler Server

然后在那里设置 JVM SDK,即 <No SDK>

这是除了在 Project Structure -> Project中设置项目 SDK 之外的事情。

看看 截图在这里

IntelliJ 13.1.6 > 文件 > 项目结构 > 设置项目 SDK

在从 Project Settings (默认为 Java8)中删除 Java1.6和 Java1.7之后,我也遇到了同样的问题。

最后,我通过将 SBT JVM 配置更改为 Custom Java (设置-> 构建、执行、部署-> 构建工具-> SBT)来解决这个问题。

这个问题通常是由“ . idea/sbt.xml”中的错误 JDK 版本引起的,例如:

<option name="jdk" value="1.7" />

当 ProjectSDK 发生更改时,此选项不会相应更新,请参见 SCL-10085。如果您通常配置了另一个 JDK (在我的示例中是1.7) ,则不会出现任何错误,但 ProjectSDK 将被悄悄地修改回来。否则,将发生此错误。

通过手动将“ . idea/sbt.xml”中的值编辑到正确的 JDK 版本,可以很容易地解决这个问题。

Scala 插件的 最新晚间新闻改变了设置项目 JDK 的方式,这在大多数情况下可以解决这个问题。有什么案子还有进展就告诉我。

对我来说,上述建议由于某些原因没有帮助。但是,我确实发现在 工程项目预设值 > 工程项目结构(欢迎屏幕)下,我的默认项目 SDK 被设置为 Go SDK。

对我有效的方法是将这个默认 SDK 设置为 JavaJDK。

这种情况发生在一个多语言项目中,当时我的主要模块的 Project SDK 是 Python,而我正试图添加一个次要模块 JDK (导入 sbt 项目)。

为了添加 sbt 模块,我不得不暂时将主模块的 SDK 项目切换到 JDK。然后,我就能够返回并将每个模块更改为正确的 SDK。