Windows mengabaikan JAVA_HOME: bagaimana cara menyetel JDK sebagai default?

90

Bagaimana cara membujuk Windows untuk menggunakan JDK daripada JRE?

Pertanyaan ini telah ditanyakan sebelumnya, di sini dan di tempat lain:

Bagaimana cara mengatur instalasi / runtime Java default (Windows)?

Masalahnya adalah bahwa Windows mengabaikan JAVA_HOMEdan juga mengabaikan fakta bahwa saya membuat direktori bin JDK sebagai entri pertama di jalur tersebut.

Ketika saya menjalankan java -versiondari baris perintah, alih-alih menjalankan instalasi JDK 1.6 saya, ia menjalankan 1.7 JRE.

Dugaan saya adalah bahwa ini adalah masalah khusus untuk 1.7, dan Windows 7 melakukan sesuatu yang seharusnya tidak dilakukan dengan registri.

Ada ide tentang cara memperbaikinya?

Edit : Ups. Saya menulis "entri pertama di jalur kelas" di atas, padahal yang saya maksud adalah "jalur". Maaf.

ccleve.dll
sumber

Jawaban:

134

Di Windows, file java executable menggunakan Windows Registry untuk menemukan versi default Java yang akan dijalankan.

Salinan java.exeuntuk menjalankan ditemukan dengan menggunakanPATH variabel lingkungan. Kecuali Anda mengambil langkah untuk mengubahnya, secara default salinan akan ditemukan di direktori Windows. Karena salinan ini tidak ada dalam direktori runtime Java, ini menempatkannya dengan melihat registri.

Jadi, Anda perlu mengubah registri, atau meletakkan versi Java yang Anda inginkan sebelum direktori Windows di file PATH.

erickson
sumber
11
OP di sini. Lihat hasil edit saya di atas. Yup, itu menyelesaikannya. Dua catatan: pertama, tampaknya penginstal Java benar-benar meletakkan java.exe di Windows \ System32. Ini mengherankan saya. Kedua, ketika Anda mengubah jalur di bawah Komputer / Properti / Pengaturan Sistem Lanjut / Variabel Lingkungan, Anda harus mengubah jalur sistem , bukan jalur pengguna . Jalur sistem mengutamakan dirinya sendiri.
ccleve
2
Saya juga akan menggarisbawahi poin user237815 bahwa tampaknya penginstal Java benar-benar menjatuhkan java.exe ke Windows \ System32. Ini tentu saja tidak intuitif bagi saya. Hanya setelah memeriksa "java -version" dari konsol, saya mendapatkan tingkat kenyamanan bahwa Windows sekarang menggunakan java.exe yang saya inginkan dari instalasi JDK saya daripada versi sebelumnya dan yang tidak diinginkan.
John Tobler
17
Masalah ini juga diselesaikan dalam kasus saya dengan mengganti nama java.exe, javaw.exe, dan javaws.exe di folder Windows / System32 saya. Kemudian, dan hanya setelah itu, java -version menampilkan versi yang disetel di JAVA_HOME dan PATH
Inversus
6
Anda menyelamatkan hari saya! Memindahkan entri yang terkait dengan JDK sebelum Windows di PATH menyelesaikan masalah. Terima kasih banyak!
the_dark_destructor
9
Saya menempatkan variabel pada %JAVA_HOME%\binposisi pertama pathpada Windows 10 dan bekerja untuk saya.
Wendel
31

Di Windows 8, Anda mungkin ingin menghapus C:\ProgramData\Oracle\Java\javapath direktori.

dari jalan

Itu memecahkan masalah saya.

Arun
sumber
5
Di windows 10, ini: C: \ Program Files (x86) \ Common Files \ Oracle \ Java \ javapath. Ini secara otomatis ditambahkan ke variabel Jalur Sistem. Hapus itu dan setel lokasi jalur khusus Anda.
Dexter
1
komentar di atas membantu dalam kasus jendela 10
Saba Ahang
24

Saya memiliki masalah ini juga. Saya menjalankan 1.6 tetapi ingin membuat kode yang saya kerjakan dengan 1.5. Saya telah mengubah JAVA_HOMEdan PATH(baik pengguna dan sistem) tidak berhasil.

Jawabannya adalah bahwa installer untuk 1,6 turun java.exe, javaw.exedan javaws.exeke saya Windows\System32folder (Windows 7).

Aku dipecahkan dengan mengganti nama file-file ke java_wrong.exe, javaw_wrong.exe, dan javaws_wrong.exe. Hanya setelah melakukan itu, ia mengambil versi java yang benar seperti yang didefinisikan dalam JAVA_HOMEdan PATH. Saya mengganti nama file dengan demikian karena itu menghapusnya dengan cara yang mudah dibalik.

Semoga ini membantu!

Inversus
sumber
10
Alih-alih mengganti nama, Anda dapat memodifikasi variabel PATH yang ditetapkan sebagai nilai pertama% JAVA_HOME% \ bin, dengan cara itu akan menjadi nilai pertama yang diperlukan
maxivis
1
Terima kasih @axvis. Saya kira masalahnya mungkin urutan elemen PATH sehingga Windows \ System32 sebelum JAVA_HOME. Saya hanya mengganti namanya sehingga mereka akan dihapus secara efektif dengan cara yang dapat dibalik.
Inversus
Entah bagaimana mengatur JAVA_HOME di jalur tidak berfungsi dengan cara apa pun bagi saya, yang ini benar-benar menyelesaikannya.
Guilherme Orioli
13

Windows tidak mengabaikan apapun. Ini adalah masalah dengan penyiapan Anda; Windows hanya menggunakan apa yang Anda sediakan. Ia tidak memiliki pengetahuan khusus tentang JAVA_HOME.

CLASSPATHtidak ada hubungannya dengan Windows juga. Untuk Windows, itu hanya variabel lingkungan yang diperluas ke lokasi folder.

Periksa %PATH%variabel lingkungan Anda . Itulah yang membuat Windows menemukan satu sebelum yang lain. Jalur (seperti yang dikatakan postingan yang Anda tautkan) harus mengarah ke %JAVA_HOME%\bin;<remainder of path>. Sekali lagi, posting yang Anda tautkan memberi Anda cara untuk mengatur ini menggunakan file batch.

(Untuk orang lain yang mungkin tidak mengetahui ini: Cara termudah untuk memeriksa% PATH% adalah dengan membuka command prompt dan mengetik echo %PATH%. Anda juga bisa melakukannya dengan mengklik Computerkanan di panel kanan Start Menu dan memilih Properties, kemudian Advanced System Settings, dan Environmental Variablestombol tne .)

Ken White
sumber
@erickson: Oke. Terima kasih - saya akan memperbaikinya. Itu masih tidak ada hubungannya dengan Windows, bagaimanapun, itulah inti dari jawaban saya. :)
Ken White
Dimengerti, saya hanya khawatir bahwa kesalahpahaman baru dapat tercipta; Java tidak tahu apa-apa lebih JAVA_HOMEdari Windows.
erickson
Saya menghargai koreksinya. Saya sendiri bukan orang Java (pengalaman terbatas hingga saat ini), jadi ada baiknya mengetahuinya untuk referensi di masa mendatang.
Ken White
1
JAVA_HOMEharus disetel ke root instalasi java. Path harus memiliki %JAVA_HOME%\bin;&lt;remainder of path%gt;, jika tidak Anda akan berakhir dengan tidak "menemukan" java, javac, dll. Tentu saja, Windows hanya benar-benar melihat PATHvariabel, tetapi beberapa alat terkait java melihat JAVA_HOMEsesekali.
Edwin Buck
@ Edwin: Memperbaiki yang hilang \binjuga. Terima kasih.
Ken White
6

Saya memiliki masalah yang sama. Saya memiliki banyak versi Java yang diinstal dan untuk beberapa alasan Java 1.7 digunakan sebagai pengganti Java 1.6, meskipun saya menentukan di jalur untuk menggunakan 1.6 (C: \ jdk1.6.0_45_32 \ bin).

Saya harus memindahkan jalur JDK yang ingin saya gunakan (1.6) untuk menjadi entri pertama dalam variabel lingkungan PATH untuk memastikan Windows menggunakan 1.6, bukan 1.7.

Jadi, misalnya variabel lingkungan PATH sebelumnya adalah:

C:\Program Files (x86);...<other entries>;C:\dev\ant181\bin;C:\jdk1.6.0_45_32\bin

dan setelah saya pindahkan jdk menjadi yang pertama, berhasil:

C:\jdk1.6.0_45_32\bin;C:\Program Files (x86);...<other entries>;C:\dev\ant181\bin

Saya kira penginstal Windows dari Java 1.7 menginstalnya ke beberapa direktori lain yang sudah ada di PATH, sehingga digunakan terlebih dahulu alih-alih entri PATH khusus yang ditentukan C: \ jdk1.6.0_45_32 \ bin;

eternalminerals.com
sumber
terima kasih bro Memindahkan jalur JAVA_HOME \ bin sebagai elemen pertama dari variabel Jalur menyelamatkan hidup saya.
ÖMER TAŞCI
4

Untuk kasus saya dalam 'Path'variabel ada parameter yang ditambahkan seperti ' C:\ProgramData\Oracle\Java\javapath;'. Lokasi ini memiliki java.exe, javaw.exedan javaws.exedari java 8 yang baru diinstal melalui jdk.exedari Oracle.

Saya telah menghapus teks ini dari Path di mana Path saya sudah memilikinya %JAVA_HOME%\bin.

Sekarang, variabel 'JAVA_HOME'mengontrol versi Java saya yang saya inginkan.

Muhammadh Aadhil
sumber
4

masukkan deskripsi gambar di siniMisalkan Anda telah menginstal JDK 10 setelah JDK 8 dan dalam variabel lingkungan sistem mengatur jalur seperti "C: \ ProgramData \ Oracle \ Java \ javapath" kemudian kontrol versi Java dengan jalur ini. itu akan mengabaikan JAVA_HOME bahkan jdk 1.8 jalur yang ditetapkan di sini Jadi hapus "C: \ ProgramData \ Oracle \ Java \ javapath" di jalur untuk mendapatkan efek jalur JAVA_HOME

Samir 007
sumber
2

Setel variabel lingkungan Path ke direktori jdk / bin yang Anda inginkan

David Levin
sumber
2

Saya telah menginstal Java 7 dan 8 dan saya ingin mengalihkan ke java 7 tetapi versi java di jendela prompt cmd saya menunjukkan Java 8.
Menambahkan jalur direktori bin Java 7 ( C: \ Program Files \ Java \ jdk1.7.0_10 \ bin ) ke variabel PATH di akhir, tetapi tidak berhasil dan menunjukkan Java 8. Jadi saya mengubah jalur Java 7 ke awal nilai jalur dan berhasil.
Membuka jendela prompt cmd baru dan memeriksa versi java saya dan sekarang menampilkan Java 7

mannedear
sumber
1

Dalam kasus saya, saya menginstal Java 7 dan 8 (keduanya x64) dan saya ingin mengarahkan ke java 7 tetapi semuanya diatur untuk menggunakan Java 8. Java menggunakan variabel lingkungan PATH:

C: \ ProgramData \ Oracle \ Java \ javapath

sebagai opsi pertama untuk mencari runtime foldernya (merupakan folder tersembunyi). Path ini berisi 3 symlink yang tidak dapat diedit.

Di pc saya, variabel lingkungan PATH terlihat seperti ini:

C: \ ProgramData \ Oracle \ Java \ javapath; C: \ Windows \ System32; C: \ Program Files \ Java \ jdk1.7.0_21 \ bin;

Dalam kasus saya, Seharusnya terlihat seperti ini:

C: \ Windows \ System32; C: \ Program Files \ Java \ jdk1.7.0_21 \ bin;

Saya harus memotong dan menempelkan symlink ke tempat lain sehingga java tidak dapat menemukannya, dan saya dapat memulihkannya nanti.

Setelah mengatur variabel lingkungan JAVA_HOME dan JRE_HOME ke runtime folder java yang diinginkan (dalam kasus saya ini adalah Java 7), perintah java -versionharus menunjukkan runtime java yang Anda inginkan. Saya berkomentar bahwa tidak perlu mengacaukan registri.

Diuji pada Win7 x64.

Broken_Window
sumber
1

Masalah ini mungkin karena versi Java sebelumnya yang diinstal di Sistem Anda. Pertama, periksa Variabel Lingkungan Anda dengan hati-hati dan hapus semua Variabel Lingkungan yang terkait dengan versi JAVA sebelumnya dan ganti jalur tersebut ke

C:\Program Files\Java\<your new jdk version>\bin
Tanay Toshniwal
sumber
0

Ada faktor tambahan di sini; Selain java executable yang ditempatkan instalasi java di mana pun Anda memintanya, di windows, penginstal java juga menempatkan salinan dari beberapa executable tersebut di direktori windows system32 Anda, jadi Anda mungkin akan menggunakan yang mana setiap java dapat dieksekusi adalah diinstal paling baru.

Ben Brammer
sumber
0

Untuk berjaga-jaga jika Anda menggunakan file .BAT sebagai Layanan Windows, saya akan menyarankan untuk menghapus instalasi layanan Windows dan menginstal ulang lagi setelah mengubah% JAVA_HOME% untuk menunjuk ke versi Java yang benar ..

Aurun
sumber
0

Setelah bergumul dengan masalah ini selama beberapa waktu dan menelitinya, akhirnya saya berhasil menyelesaikannya dengan mengikuti langkah-langkah berikut:

1) instal jdk versi 12
2) Buat variabel baru di variabel sistem
3) Beri nama sebagai JAVA_HOME dan berikan jalur instalasi jdk
4) tambahkan variabel ini di jalur dan pindahkan ke atas.
5) pergi ke C: \ Program Files (86) \ Common Files \ Oracle \ Java \ javapath dan ganti java.exe dan javaw.exe dengan file yang sesuai dengan nama yang sama dari folder pathtojavajdk / bin

Akhirnya, saya memeriksa versi default java di cmd dengan "java -version" dan berhasil!

Rodrigo Araujo
sumber
0

Saya memiliki masalah yang sama, dalam pengaturan variabel lingkungan pengguna saya memiliki JAVA_HOME dan PATH dikonfigurasi dengan benar tetapi tidak berhasil. Saat saya memperbarui variabel lingkungan sistem saya, maka variabel itu mulai berfungsi.

sunleo
sumber