Quelle est la raison de «Erreur: Impossible de déterminer l’exécutable de la machine virtuelle Java dans un JDK sélectionné»?

J’utilise IntelliJ IDEA 13.1.4 et j’ai également essayé la dernière version 14.

En cours d’exécution SBT je reçois l’erreur suivante:

Error:Cannot determine Java VM executable in selected JDK 

JDK 1.7 est installé sur ma machine et sur PATH.

Dans les journaux ( ~/Library/Logs/IntelliJIdea14/idea.log sous MacOS), il existe la trace de stack suivante:

 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) 

Quelle peut en être la raison?

Vous devriez pouvoir le contourner en définissant le jdk à partir des parameters qui ne figurent pas dans la boîte de dialog du projet d’ouverture / importation.

Dans l’écran de bienvenue, allez dans Configure -> Project defaults -> Project structure et ajoutez le jdk.

entrer la description de l'image ici

L’ouverture du projet sbt devrait alors bien fonctionner.

Solution trouvée d’ici

Une autre façon de définir JDK est d’utiliser les parameters de votre module / projet actuel (pour votre projet actuel).

Sélectionnez Open Module Settings du Open Module Settings dans le menu contextuel du projet (ou appuyez sur F4 par défaut),
Ensuite, dans l’onglet de gauche, sélectionnez Project et pointez le Project SDK de Project SDK logiciel ( Project SDK sur la liste déroulante.

entrer la description de l'image ici

Le problème est généralement dû à une mauvaise version du JDK dans “.idea / sbt.xml”, par exemple:

  

Cette option n’est pas mise à jour en conséquence lorsque le SDK de projet est modifié, voir SCL-10085 . Si vous avez l’autre JDK (1.7 dans mon exemple) généralement configuré, aucune erreur ne se produira, mais le SDK de projet sera silencieusement rétabli. Sinon, cette erreur se produit.

Le problème peut facilement être résolu en modifiant manuellement la valeur dans “.idea / sbt.xml” à la bonne version du JDK.

La même erreur se produit également lorsque vous essayez d’effectuer une actualisation dans “Tâches SBT”.

Ouvrir

 Preferences -> Language & Frameworks -> Scala Comstackr Server 

Allumer

 Run comstack server (in external build mode) 

Une fois que vous avez terminé d’actualiser le projet, désactivez-le à nouveau pour activer le remplacement à chaud lorsque vous modifiez votre code dans l’éditeur.

Je devais ouvrir Settings -> Language & Frameworks -> Scala Comstackr Server

Ensuite, définissez le SDK JVM qui était .

Cela s’ajoutait à la définition du SDK de Project Structure -> Project dans Project Structure -> Project .

Voir la capture d’écran ici .

IntelliJ 13.1.6> Fichier> Structure du projet> définir le SDK du projet

J’ai eu le même problème après avoir supprimé Java1.6 et Java1.7 de Project Settings (avec Java8 par défaut).

Enfin, je résous le problème en modifiant la configuration de JVM SBT en Java personnalisé (Paramètres -> Créer, Exécuter, Déployer -> Outils de génération -> SBT).

Pour moi, les suggestions ci-dessus n’ont pas aidé pour une raison quelconque. Cependant, j’ai compris que sous Défauts du projet> Structure du projet (écran de bienvenue), mon SDK de projet par défaut était défini sur le SDK Go.

Ce qui a fonctionné pour moi était de définir ce SDK par défaut sur le JDK Java.

Pour moi, j’avais choisi le JDK dans “Paramètres du module ouvert”> Module> Dépendances> Kit SDK. Toutefois, SBT recherchait JDK au niveau du projet, défini dans “Paramètres du module ouvert”> Projet> Kit de développement logiciel (SDK) du projet, comme indiqué par @michasm ci-dessus.

Les dernières Nightlies du plug-in Scala modifient la configuration du projet JDK, ce qui devrait résoudre ce problème dans la plupart des cas. Faites-moi savoir si ça casse encore dans certains cas.