Apa alasan untuk "Kesalahan: Tidak dapat menentukan Java VM yang dapat dieksekusi di JDK yang dipilih"?

110

Saya menggunakan IntelliJ IDEA 13.1.4 dan juga mencoba rilis terbaru 14.

Menjalankan SBT Saya mendapatkan kesalahan berikut:

Error:Cannot determine Java VM executable in selected JDK

Saya telah menginstal JDK 1.7 di mesin saya dan di PATH.

Di log ( ~/Library/Logs/IntelliJIdea14/idea.logdi MacOS) ada pelacakan tumpukan berikut:

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)

Apa alasannya?

Zuriar
sumber
Sepertinya Anda memiliki JRE Project SDKuntuk proyek yang ditentukan. Bisakah Anda memeriksa Pengaturan Proyek untuk proyek yang dimaksud dan melihat pengaturan di bawah Proyek?
Jacek Laskowski
Saya menemukan bahwa saya perlu Memvalidasi Cache seperti yang dijelaskan dalam jawaban ini .
merampok mayoff

Jawaban:

204

Anda harus dapat mengatasinya dengan menyetel jdk dari pengaturan bukan dari dialog proyek buka / impor.

Dari layar pembuka, buka Configure -> Project defaults -> Project structuredan tambahkan jdk.

masukkan deskripsi gambar di sini

Membuka proyek sbt seharusnya bekerja dengan baik.

Menemukan solusi dari sini

Prabu
sumber
25

Cara lain untuk mengatur JDK adalah dari modul / pengaturan proyek Anda saat ini (untuk proyek Anda saat ini)

Pilih Open Module Settingsdari menu konteks proyek (atau klik default F4),
lalu dari tab kiri pilih Projectdan arahkan ke kanan Project SDKpada dropdown.

masukkan deskripsi gambar di sini

michalczukm.dll
sumber
20

Masalah ini biasanya disebabkan oleh versi JDK yang salah di ".idea / sbt.xml", misalnya:

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

Opsi ini tidak diperbarui sebagaimana mestinya saat Project SDK diubah, lihat SCL-10085 . Jika Anda memiliki JDK lain (1.7 dalam contoh saya) yang umumnya dikonfigurasi, tidak akan terjadi kesalahan, tetapi Project SDK akan diam-diam diubah kembali. Jika tidak, kesalahan ini terjadi.

Masalahnya dapat dengan mudah diselesaikan dengan mengedit nilai dalam ".idea / sbt.xml" secara manual ke versi JDK yang benar.

F30
sumber
7

Kesalahan yang sama juga terjadi saat Anda mencoba melakukan penyegaran di "tugas SBT".

Buka

Preferences -> Language & Frameworks -> Scala Compiler Server

Nyalakan

Run compile server (in external build mode)

Setelah Anda selesai menyegarkan proyek, matikan lagi untuk mengaktifkan hotswapping kembali ketika Anda mengubah kode Anda di editor.

Onur Aktaş
sumber
4

Saya harus membuka Settings -> Language & Frameworks -> Scala Compiler Server

Kemudian atur JVM SDK di sana, yaitu <No SDK>.

Ini sebagai tambahan untuk mengatur Project SDK di Project Structure -> Project.

Lihat tangkapan layarnya di sini .

Michael Prentice
sumber
1

IntelliJ 13.1.6> File> Struktur Proyek> setel SDK Proyek

soheildb
sumber
1

Saya mendapat masalah yang sama setelah saya menghapus Java1.6 dan Java1.7 dari Pengaturan Proyek (dengan Java8 sebagai default).

Akhirnya saya menyelesaikan masalah dengan mengubah konfigurasi SBT JVM ke Java Kustom (Pengaturan -> Build, Execution, Deployment -> Build Tools -> SBT).

wu zhonglin
sumber
1

Bagi saya saran di atas tidak membantu karena suatu alasan. Namun, saya menemukan itu di bawah Project Defaults> Project Structure (Layar Selamat Datang) Project SDK default saya disetel ke Go SDK.

Apa yang berhasil bagi saya adalah menyetel SDK default ini ke Java JDK.

edin0x
sumber
0

Bagi saya, saya telah memilih JDK di "Open Module Settings"> Module> Dependencies> Module SDK. Namun, SBT mencari JDK di level project yang disetel di "Open Module Settings"> Project> Project SDK seperti yang ditunjukkan @michasm di atas

Siwa
sumber
0

The nightlies terbaru dari Scala Plugin perubahan bagaimana proyek JDK diatur, yang harus memecahkan masalah ini dalam banyak kasus. Beri tahu saya jika masih rusak pada beberapa kasus.

Justin Kaeser
sumber
0

Ini terjadi pada saya dalam proyek multi-bahasa ketika Project SDK modul utama saya adalah Python dan saya mencoba menambahkan modul sekunder yaitu JDK (mengimpor proyek sbt).

Saya harus mengganti sementara Project SDK modul utama ke JDK untuk menambahkan modul sbt. Saya kemudian memiliki kemampuan untuk kembali dan mengubah setiap modul ke SDK yang benar.

Bryan Johnson
sumber