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を設定することで回避できます。
ようこそ画面からConfigure -> Project defaults -> Project structure
に移動し、jdkを追加します。
Sbtプロジェクトを開くとうまく動作するはずです。
JDKを設定するもう1つの方法は、現在のモジュール/プロジェクト設定から(現在のプロジェクト用)
プロジェクトのコンテキストメニューからPickOpen Module Settings
(またはデフォルトでF4を押します)、
次に、左側のタブからProject
を選択し、ドロップダウンで正しいProject SDK
をポイントします。
この問題は通常、「。idea/sbt.xml」のJDKバージョンが間違っているために発生します。例:
<option name="jdk" value="1.7" />
Project 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)
プロジェクトの更新が完了したら、エディターでコードを変更したときにホットスワップバックを有効にするには、プロジェクトを再度オフにします。
Settings -> Language & Frameworks -> Scala Compiler Server
を開かなければなりませんでした
次に、<No SDK>
であったJVM SDKをそこに設定します。
これは、Project Structure -> Project
でのプロジェクトSDKの設定に追加されました。
スクリーンショットはこちら をご覧ください。
IntelliJ 13.1.6>ファイル>プロジェクト構造>プロジェクトSDKの設定
私にとって、上記の提案は何らかの理由で役に立たなかった。ただし、プロジェクトのデフォルト>プロジェクトの構造(ようこそ画面)で、デフォルトのプロジェクトSDKがGo SDKに設定されていることがわかりました。
私にとってうまくいったのは、このデフォルトのSDKをJava JDKに設定することでした。
プロジェクト設定からJava1.6とJava1.7を削除した後、同じ問題が発生しました(デフォルトとしてJava8を使用)。
最後に、SBT JVM構成をカスタムJavaに変更することで問題を解決します(設定->ビルド、実行、デプロイメント->ビルドツール-> SBT)。
Scalaプラグインの latest Nightlies は、プロジェクトJDKの設定方法を変更します。これにより、ほとんどの場合、これが解決されます。いくつかのケースでまだ壊れているかどうか教えてください。
私の場合、「モジュール設定を開く」>「モジュール」>「依存関係」>「モジュールSDK」でJDKを選択しました。ただし、SBTはプロジェクトレベルでJDKを探していました。これは、@ michasmが上記で指摘したように、[モジュール設定を開く]> [プロジェクト]> [プロジェクトSDK]で設定されます。
プライマリモジュールのプロジェクトSDKがPythonであり、JDK(sbtプロジェクトのインポート)であるセカンダリモジュールを追加しようとしたときに、多言語プロジェクトでこれが起こりました。
Sbtモジュールを追加するために、一時的にプライマリモジュールのプロジェクトSDKをJDKに切り替える必要がありました。その後、戻って各モジュールを正しいSDKに変更することができました。