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

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

这可能是什么原因?

你应该可以通过设置jdk而不是从打开/导入项目对话框来设置jdk。

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

在这里输入图像说明

那么打开sbt项目应该可以。

从这里find解决scheme

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

从项目上下文菜单中selectOpen Module Settings (或默认命中F4),
然后从左侧的选项卡中selectProject并在下拉菜单中指向正确的Project SDK

在这里输入图像说明

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

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

在项目SDK更改时,此选项不会相应更新,请参阅SCL-10085 。 如果您有其他JDK(我的示例中为1.7),则不会发生错误,但是Project SDK将被悄悄地更改回来。 否则,会发生此错误。

通过手动将“.idea / sbt.xml”中的值编辑为正确的JDK版本,可以轻松解决该问题。

当您尝试在“SBT任务”中执行刷新时,也会出现相同的错误。

打开

 Preferences -> Language & Frameworks -> Scala Compiler Server 

打开

 Run compile server (in external build mode) 

完成项目刷新后,再次closures它,以便在编辑器中更改代码时启用热启动。

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

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

这是除了在Project Structure -> Project设置项目SDK。

看这里的截图 。

从项目设置中删除Java1.6和Java1.7(默认为Java8)后,我遇到了同样的问题。

最后,我通过将SBT JVMconfiguration更改为自定义Java(设置 – >构build,执行,部署 – >构build工具 – > SBT)来解决问题。

对于我来说,上述build议并没有帮助。 不过,我发现在Project Defaults> Project Structure (欢迎屏幕)下,我的默认Project SDK被设置为Go SDK。

我的工作是将这个默认的SDK设置为Java JDK。

对于我来说,我在“Open Module Settings”>“Module> Dependencies> Module SDK”中select了JDK。 但是,SBT正在寻找在项目级别的JDK,这是在“Open Module Settings”> Project> Project SDK中设置的,正如@michasm在上面指出的那样

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

Scala插件的最新Nightlies改变了项目JDK的设置方式,在大多数情况下应该解决这个问题。 让我知道,如果它仍然在一些情况下打破。