Jaki jest powód „Błąd: nie można określić pliku wykonywalnego Java VM w wybranym JDK”?

110

Używam IntelliJ IDEA 13.1.4, a także wypróbowałem najnowszą wersję 14.

Uruchamiając SBT otrzymuję następujący błąd:

Error:Cannot determine Java VM executable in selected JDK

Mam JDK 1.7 zainstalowany na moim komputerze i na PATH.

W dziennikach ( ~/Library/Logs/IntelliJIdea14/idea.logw systemie MacOS) znajduje się następujący ślad stosu:

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)

Jaki może być tego powód?

Zuriar
źródło
Prawdopodobnie masz środowisko JRE Project SDKdla zdefiniowanego projektu. Czy możesz sprawdzić ustawienia projektu dla danego projektu i zobaczyć ustawienia w obszarze Projekt?
Jacek Laskowski
Okazało się, że muszę unieważnić pamięci podręczne, jak opisano w tej odpowiedzi .
rob mayoff

Odpowiedzi:

204

Powinieneś być w stanie to obejść, ustawiając jdk w ustawieniach, a nie w oknie dialogowym otwierania / importowania projektu.

Na ekranie powitalnym przejdź do Configure -> Project defaults -> Project structurei dodaj plik jdk.

wprowadź opis obrazu tutaj

Otwarcie projektu sbt powinno wtedy działać dobrze.

Znalazłem rozwiązanie stąd

Prabu
źródło
25

Innym sposobem ustawienia JDK jest użycie aktualnych ustawień modułu / projektu (dla obecnego projektu)

Wybierz Open Module Settingsz menu kontekstowego projektu (lub domyślnie naciśnij F4),
następnie z lewej zakładki wybierz Projecti wskaż prawidłowo Project SDKna rozwijanym menu.

wprowadź opis obrazu tutaj

michalczukm
źródło
20

Problem jest zwykle spowodowany nieprawidłową wersją JDK w pliku „.idea / sbt.xml”, np .:

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

Ta opcja nie jest odpowiednio aktualizowana po zmianie zestawu SDK projektu, patrz SCL-10085 . Jeśli masz inny JDK (w moim przykładzie 1.7) ogólnie skonfigurowany, nie wystąpi żaden błąd, ale pakiet Project SDK zostanie po cichu zmieniony z powrotem. W przeciwnym razie wystąpi ten błąd.

Problem można łatwo rozwiązać, ręcznie edytując wartość w pliku „.idea / sbt.xml” do odpowiedniej wersji JDK.

F30
źródło
7

Ten sam błąd występuje również podczas próby odświeżenia w „zadaniach SBT”.

otwarty

Preferences -> Language & Frameworks -> Scala Compiler Server

Włączyć

Run compile server (in external build mode)

Po zakończeniu odświeżania projektu wyłącz go ponownie, aby włączyć funkcję hotswapping z powrotem po zmianie kodu w edytorze.

Onur Aktaş
źródło
4

Musiałem otworzyć Settings -> Language & Frameworks -> Scala Compiler Server

Następnie ustaw tam zestaw JVM SDK, który był <No SDK>.

Było to oprócz ustawienia zestawu SDK projektu w Project Structure -> Project.

Zobacz zrzut ekranu tutaj .

Michael Prentice
źródło
1

IntelliJ 13.1.6> Plik> Struktura projektu> ustaw Project SDK

soheildb
źródło
1

Mam ten sam problem po usunięciu Java 1.6 i Java 1.7 z Project Settings (z Java8 jako domyślną).

Wreszcie rozwiązuję problem, zmieniając konfigurację SBT JVM na niestandardową Javę (Ustawienia -> Kompilacja, Wykonanie, Wdrożenie -> Narzędzia kompilacji -> SBT).

wu zhonglin
źródło
1

Dla mnie powyższe sugestie z jakiegoś powodu nie pomogły. Jednak zorientowałem się, że w obszarze Ustawienia domyślne projektu> Struktura projektu (ekran powitalny) mój domyślny zestaw SDK projektu był ustawiony na Go SDK.

U mnie zadziałało ustawienie tego domyślnego zestawu SDK na Java JDK.

edin0x
źródło
0

Dla mnie wybrałem JDK w „Otwórz ustawienia modułu”> Moduł> Zależności> Moduł SDK. Jednak SBT szukało JDK na poziomie projektu, który jest ustawiony w „Otwórz ustawienia modułu”> Projekt> Projekt SDK, jak @michasm wskazał powyżej

siedmiodniowa żałoba
źródło
0

Te ostatnie nightly wtyczki zmiany Scala w jaki sposób projekt JDK jest ustawiony, co powinno rozwiązać ten problem w większości przypadków. Daj mi znać, jeśli w niektórych przypadkach nadal się psuje.

Justin Kaeser
źródło
0

Zdarzyło mi się to w projekcie wielojęzycznym, gdy SDK projektu mojego modułu podstawowego to Python i próbowałem dodać dodatkowy moduł, którym był JDK (importowanie projektu sbt).

Musiałem tymczasowo zmienić pakiet Project SDK modułu podstawowego na JDK, aby dodać moduł sbt. Wtedy mogłem wrócić i zmienić każdy moduł na właściwy zestaw SDK.

Bryan Johnson
źródło