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


110

我正在使用IntelliJ IDEA 13.1.4,还尝试了最新版本14。

运行SBT时出现以下错误:

Error:Cannot determine Java VM executable in selected JDK

我的机器和PATH上都安装了JDK 1.7。

在日志中(~/Library/Logs/IntelliJIdea14/idea.log在MacOS上),有以下堆栈跟踪:

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 。您可以检查相关项目的“项目设置”,然后查看“项目”下的设置吗?
Jacek Laskowski

我发现我需要的Invalidate缓存描述在这个答案
罗布·马约夫(Rob Mayoff)'16

Answers:


204

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

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

在此处输入图片说明

然后,打开sbt项目应该会很好。

从这里找到解决方案


25

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

匹克Open Module Settings从项目的上下文菜单(或默认按F4键),
然后从左侧选项卡选择Project和正确的点Project SDK上下拉。

在此处输入图片说明


20

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

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

更改Project SDK时,不会相应更新此选项,请参阅SCL-10085。如果您通常配置了其他JDK(在我的示例中为1.7),则不会发生任何错误,但是Project SDK将被无提示地改回。否则,将发生此错误。

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


7

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

打开

Preferences -> Language & Frameworks -> Scala Compiler Server

打开

Run compile server (in external build mode)

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




1

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

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


1

对我来说,以上建议由于某种原因没有帮助。但是,我确实发现在Project Defaults> Project Structure(欢迎屏幕)下,我的默认Project SDK设置为Go SDK。

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


0

对我而言,我已在“打开模块设置”>“模块”>“依赖关系”>“模块SDK”中选择了JDK。但是,如@michasm所指出的,SBT在项目级别寻找JDK,该项目在“打开模块设置”>“项目”>“ Project SDK”中设置。



0

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.