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

时间:2014-08-08 10:26:46

标签: intellij-idea sbt

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

这可能是什么原因?

11 个答案:

答案 0 :(得分:204)

您应该能够通过设置jdk而不是打开/导入项目对话框来设置它。

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

enter image description here

打开sbt项目应该可以正常工作。

Found solution from here

答案 1 :(得分:25)

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

从项目上下文菜单中选择Open Module Settings(或默认点击F4),然后从左侧标签中选择Project并在下拉列表中指出正确的Project SDK

enter image description here

答案 2 :(得分:20)

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

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

更改Project SDK时,此选项不会相应更新,请参阅SCL-10085。如果您通常配置了其他JDK(在我的示例中为1.7),则不会发生错误,但Project SDK将以静默方式进行更改。否则,会发生此错误。

通过手动编辑&#34; .idea / sbt.xml&#34;中的值可以轻松解决问题。到正确的JDK版本。

答案 3 :(得分:7)

当您尝试在&#34; SBT任务&#34;中进行刷新时,也会发生同样的错误。

打开

Preferences -> Language & Frameworks -> Scala Compiler Server

开启

Run compile server (in external build mode)

完成项目刷新后,再次将其关闭以在编辑器中更改代码时启用hotswapping。

答案 4 :(得分:4)

我必须打开Settings -> Language & Frameworks -> Scala Compiler Server

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

这是在Project Structure -> Project

中设置Project SDK的补充

请参阅screenshot here

答案 5 :(得分:1)

IntelliJ 13.1.6&gt;文件&gt;项目结构&gt;设置Project SDK

答案 6 :(得分:1)

从Project Settings(默认使用Java8)删除Java1.6和Java1.7后,我遇到了同样的问题。

最后,我通过将SBT JVM配置更改为自定义Java(设置 - &gt;构建,执行,部署 - &gt;构建工具 - &gt; SBT)来解决问题。

答案 7 :(得分:1)

对我来说,上述建议由于某种原因没有帮助。但是,我确实在 Project Defaults&gt;下找到了它。项目结构(欢迎屏幕)我的默认Project SDK已设置为Go SDK。

对我来说有用的是将此默认SDK设置为Java JDK。

答案 8 :(得分:0)

对我来说,我在“开放模块设置”&gt;中选择了JDK。模块&gt;依赖性&gt;模块SDK。 但是,SBT正在项目级别寻找JDK,该级别在“开放模块设置”&gt;中设置。项目&gt; @michasm的Project SDK已在上面指出

答案 9 :(得分:0)

Scala插件的latest Nightlies改变了项目JDK的设置方式,在大多数情况下应该解决这个问题。如果在某些情况下它仍然存在,请告诉我。

答案 10 :(得分:0)

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

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