javac tidak dikenali sebagai perintah internal atau eksternal, program yang dapat dijalankan atau file batch [ditutup]

253

Saya mengalami kesalahan saat mencoba mengompilasi program Java.

Saya menggunakan Windows (ini adalah masalah khusus Windows) dan saya telah menginstal JDK terbaru.

Saya telah mencoba solusi yang melibatkan PATHvariabel, tetapi kesalahan tetap ada.

Output konsol:

C:\>set path=C:Program Files (x86)\Java\jdk1.7.0\bin
C:\>javac Hello.java
'javac' is not recognized as an internal or external command,
operable program or batch file.
pengguna987137
sumber
7
saya pikir jalur Anda tidak ditetapkan. pergi ke lingkungan Anda dan atur path mereka
Ron
2
Pertanyaan ini tampaknya di luar topik karena mudah ditemukan dalam instruksi instalasi JDK yang sebenarnya dan jawabannya ada yang terkini dan berkualitas lebih tinggi daripada jawaban apa pun di sini. Ini juga tersedia, untuk semua platform, di bab pertama tutorial memulai resmi .
Jason C
8
Ta untuk informasi Jason C. Tapi saya akui saya menemukan keputusan untuk menyebut utas ini di luar topik tampaknya bertentangan dengan jumlah orang lain yang telah mengangkat jawaban ini. Seperti yang akan saya lakukan.
Matt Stevens
Menambahkan variabel baru lebih mudah dan setelah Anda membuat variabel "PATH" baru, pastikan Anda menambahkan titik koma (;) dan akhir nilainya.
Amir Md Amiruzzaman

Jawaban:

434

TL; DR

Untuk pembaca berpengalaman:

  1. Temukan jalur Java; terlihat seperti ini:C:\Program Files\Java\jdkxxxx\bin\
  2. Pencarian menu awal untuk "variabel lingkungan" untuk membuka dialog opsi.
  3. Periksa PATH. Hapus jalur Java lama.
  4. Tambahkan jalur Java baru ke PATH.
  5. Edit JAVA_HOME.
  6. Tutup dan buka kembali konsol / IDE.

Selamat datang!

Anda telah menemukan salah satu masalah teknis paling terkenal yang dihadapi pemula Java: 'xyz' is not recognized as an internal or external command...pesan kesalahan.

Singkatnya, Anda belum menginstal Java dengan benar . Menyelesaikan instalasi Java pada Windows membutuhkan beberapa langkah manual. Anda harus selalu melakukan langkah-langkah ini setelah menginstal Java, termasuk setelah memutakhirkan JDK.

Variabel lingkungan dan PATH

(Jika Anda sudah memahami hal ini, silakan lewati tiga bagian berikutnya.)

Ketika Anda menjalankan javac HelloWorld.java, cmd harus menentukan di mana javac.exeberada. Ini dilakukan dengan PATHvariabel lingkungan.

Sebuah variabel lingkungan adalah sepasang khusus kunci-nilai (misalnya windir=C:\WINDOWS). Sebagian besar datang dengan sistem operasi, dan beberapa diperlukan untuk fungsi sistem yang tepat. Daftarnya diteruskan ke setiap program (termasuk cmd) ketika dimulai. Pada Windows , ada dua jenis : variabel lingkungan pengguna dan variabel lingkungan sistem .

Anda dapat melihat variabel lingkungan Anda seperti ini:

C:\>set
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\craig\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
CommonProgramW6432=C:\Program Files\Common Files
...

Variabel yang paling penting adalah PATH. Ini adalah daftar jalur, dipisahkan oleh ;. Ketika sebuah perintah dimasukkan ke cmd, setiap direktori dalam daftar akan dipindai untuk eksekusi yang cocok.

Di komputer saya, PATHadalah:

C:\>echo %PATH%
C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPower
Shell\v1.0\;C:\ProgramData\Microsoft\Windows\Start Menu\Programs;C:\Users\craig\AppData\
Roaming\Microsoft\Windows\Start Menu\Programs;C:\msys64\usr\bin;C:\msys64\mingw64\bin;C:\
msys64\mingw32\bin;C:\Program Files\nodejs\;C:\Program Files (x86)\Yarn\bin\;C:\Users\
craig\AppData\Local\Yarn\bin;C:\Program Files\Java\jdk-10.0.2\bin;C:\ProgramFiles\Git\cmd;
C:\Program Files\Oracle\VirtualBox;C:\Program Files\7-Zip\;C:\Program Files\PuTTY\;C:\
Program Files\launch4j;C:\Program Files (x86)\NSIS\Bin;C:\Program Files (x86)\Common Files
\Adobe\AGL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program
Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\iCLS Client\;
C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files
(x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\iCLS
Client\;C:\Users\craig\AppData\Local\Microsoft\WindowsApps

Ketika Anda menjalankan javac HelloWorld.java, cmd, setelah menyadari bahwa javacitu bukan perintah internal , mencari sistem yang PATHdiikuti oleh penggunaPATH . Ini mekanis memasuki setiap direktori dalam daftar, dan memeriksa apakah javac.com, javac.exe, javac.bat, dll hadir. Ketika ditemukan javac, ia menjalankannya. Ketika tidak, ia akan mencetak'javac' is not recognized as an internal or external command, operable program or batch file.

Anda harus menambahkan direktori Java executables ke PATH.

JDK vs. JRE

(Jika Anda sudah mengerti ini, silakan lewati bagian ini.)

Saat mengunduh Java, Anda ditawari pilihan antara:

  • The Java Runtime Environment (JRE), yang meliputi alat yang diperlukan untuk menjalankan program Java, tapi tidak untuk mengkompilasi yang baru - mengandung javatapi tidak javac.
  • The Java Development Kit (JDK), yang berisi baik javadan javac, bersama dengan sejumlah alat pembangunan lainnya. JDK adalah superset dari JRE.

Anda harus memastikan Anda telah menginstal JDK . Jika Anda hanya menginstal JRE, Anda tidak dapat mengeksekusi javackarena Anda tidak memiliki instalasi kompiler Java pada hard drive Anda. Periksa daftar program Windows Anda, dan pastikan nama paket Java menyertakan kata-kata "Kit Pengembangan" di dalamnya.

Jangan gunakan set

(Jika Anda tidak berencana untuk melakukannya, silakan lewati bagian ini.)

Beberapa jawaban lain merekomendasikan untuk menjalankan beberapa variasi:

C:\>:: DON'T DO THIS
C:\>set PATH=C:\Program Files\Java\jdk1.7.0_09\bin

Jangan lakukan itu. Ada beberapa masalah utama dengan perintah itu:

  1. Perintah ini menghapus semua yang lain dari PATHdan menggantinya dengan jalur Java. Setelah menjalankan perintah ini, Anda mungkin menemukan berbagai perintah lain tidak berfungsi.
  2. Path Java Anda mungkin tidak C:\Program Files\Java\jdk1.7.0_09\bin - Anda hampir pasti memiliki versi JDK yang lebih baru, yang akan memiliki path yang berbeda.
  3. Yang baru PATH hanya berlaku untuk sesi cmd saat ini. Anda harus masuk kembali setperintah setiap kali Anda membuka Command Prompt.

Poin # 1 dan # 2 dapat diselesaikan dengan versi yang sedikit lebih baik ini:

C:\>:: DON'T DO THIS EITHER
C:\>set PATH=C:\Program Files\Java\<enter the correct Java folder here>\bin;%PATH%

Tapi itu hanya ide yang buruk secara umum.

Temukan jalur Java

Cara yang benar dimulai dengan menemukan di mana Anda telah menginstal Java. Ini tergantung pada bagaimana Anda menginstal Java.

Pemasang exe

Anda telah menginstal Java dengan menjalankan program pengaturan. Pemasang Oracle menempatkan versi Java di bawah C:\Program Files\Java\(atau C:\Program Files (x86)\Java\). Dengan File Explorer atau Command Prompt, navigasikan ke direktori itu.

Setiap subfolder mewakili versi Java. Jika hanya ada satu, Anda telah menemukannya. Jika tidak, pilih yang terlihat seperti versi yang lebih baru. Pastikan nama folder dimulai dengan jdk(tidak seperti jre). Masukkan direktori.

Lalu masukkan bindirektori itu.

Anda sekarang berada di direktori yang benar. Salin jalurnya. Jika di File Explorer, klik bilah alamat. Jika di Command Prompt, salin prompt.

Path Java yang dihasilkan harus dalam bentuk (tanpa tanda kutip):

C:\Program Files\Java\jdkxxxx\bin\

File zip

Anda telah mengunduh .zip yang berisi JDK. Ekstrak ke tempat acak di mana itu tidak akan menghalangi Anda; C:\Java\adalah pilihan yang bisa diterima.

Kemudian cari binfolder di suatu tempat di dalamnya.

Anda sekarang berada di direktori yang benar. Salin jalurnya. Ini adalah jalur Java.

Ingatlah untuk tidak pernah memindahkan folder, karena itu akan membatalkan jalur.

Buka dialog pengaturan

Itu adalah dialog untuk diedit PATH. Ada banyak cara untuk mencapai dialog itu, tergantung pada versi Windows Anda, pengaturan UI, dan seberapa kacau konfigurasi sistem Anda.

Cobalah beberapa di antaranya:

  • Mulai Menu / kotak pencarian bilah tugas »pencarian" variabel lingkungan "
  • Menangkan + R » control sysdm.cpl,,3
  • Win + R » SystemPropertiesAdvanced.exe» Variabel Lingkungan
  • File Explorer »ketik di address bar Control Panel\System and Security\System» Pengaturan Sistem Lanjut (paling kiri, di sidebar) »Variabel Lingkungan
  • Desktop »klik kanan PC ini» Properti »Pengaturan Sistem Lanjut» Variabel Lingkungan
  • Menu Mulai »klik kanan Komputer» Properti »Pengaturan Sistem Lanjut» Variabel Lingkungan
  • Panel Kontrol (mode ikon) »Sistem» Pengaturan Sistem Lanjut »Variabel Lingkungan
  • Panel Kontrol (mode kategori) »Sistem dan Keamanan» Sistem »Pengaturan Sistem Lanjut» Variabel Lingkungan
  • Desktop »klik kanan Komputer Saya» Tingkat Lanjut »Variabel Lingkungan
  • Control Panel »Sistem» Lanjutan »Variabel Lingkungan

Semua ini akan membawa Anda ke dialog pengaturan yang benar.

Jika Anda menggunakan Windows 10, Microsoft telah memberkati Anda dengan UI baru yang indah untuk diedit PATH. Jika tidak, Anda akan melihat PATHdalam kemuliaan penuh bertitik koma, diperas ke dalam kotak teks satu baris. Lakukan yang terbaik untuk melakukan pengeditan yang diperlukan tanpa merusak sistem Anda.

Bersih PATH

Lihatlah PATH. Anda hampir pasti memiliki dua PATHvariabel (karena variabel lingkungan pengguna vs sistem). Anda harus melihat keduanya.

Periksa jalur Java lainnya dan hapus. Keberadaan mereka dapat menyebabkan segala macam konflik. (Misalnya, jika Anda memiliki JRE 8 dan JDK 11 dalam PATH, dalam urutan itu, maka javacakan memanggil kompiler Java 11, yang akan membuat .classfile versi 55 , tetapi javaakan memanggil Java 8 JVM, yang hanya mendukung hingga versi 52, dan Anda akan mengalami kesalahan versi yang tidak didukung dan tidak dapat mengkompilasi dan menjalankan program apa pun.) Menghindari masalah ini dengan memastikan Anda hanya memiliki satu jalur Java PATH. Dan saat Anda melakukannya, Anda juga dapat menghapus versi Java yang lama juga. Dan ingat bahwa Anda tidak perlu memiliki JDK dan JRE.

Jika sudah C:\ProgramData\Oracle\Java\javapath, hapus juga . Oracle bermaksud untuk memecahkan masalah kerusakan jalur Java setelah peningkatan dengan membuat tautan simbolik yang akan selalu mengarah ke instalasi Java terbaru. Sayangnya, sering berakhir menunjuk ke lokasi yang salah atau tidak berfungsi . Lebih baik menghapus entri ini dan mengelola jalur Java secara manual.

Sekarang juga merupakan kesempatan yang baik untuk melakukan pemeliharaan umum PATH. Jika Anda memiliki jalur yang berkaitan dengan perangkat lunak yang tidak lagi diinstal pada PC Anda, Anda dapat menghapusnya. Anda juga dapat mengacak urutan jalur (jika Anda peduli dengan hal-hal seperti itu).

Tambahkan PATH

Sekarang ambil path Java yang Anda temukan tiga langkah yang lalu, dan letakkan di sistem PATH.

Seharusnya tidak masalah di mana dalam daftar jalur baru Anda pergi; Menempatkannya di akhir adalah pilihan yang bagus.

Jika Anda menggunakan UI pra-Windows 10, pastikan Anda telah menempatkan titik koma dengan benar. Harus ada satu yang memisahkan setiap jalur dalam daftar.

Sebenarnya tidak banyak yang bisa dikatakan di sini. Cukup tambahkan path ke PATHdan klik OK.

Set JAVA_HOME

Saat Anda melakukannya, Anda mungkin juga mengaturnya JAVA_HOME. Ini adalah variabel lingkungan lain yang juga harus mengandung jalur Java. Banyak program Java dan non-Jawa, termasuk sistem Java build populer Maven dan Gradle , akan melempar kesalahan jika tidak diatur dengan benar.

Jika JAVA_HOMEtidak ada, buat sebagai variabel lingkungan sistem baru. Atur ke jalur direktori Java tanpa bin/direktori, yaitu C:\Program Files\Java\jdkxxxx\.

Ingatlah untuk mengedit JAVA_HOMEsetelah memutakhirkan Java juga.

Tutup dan buka kembali Command Prompt

Meskipun Anda telah memodifikasi PATH, semua program yang berjalan, termasuk cmd, hanya melihat yang lama PATH. Ini karena daftar semua variabel lingkungan hanya disalin ke dalam program ketika mulai dijalankan; setelah itu, hanya berkonsultasi salinan yang di-cache.

Tidak ada cara yang baik untuk me - refresh variabel lingkungan cmd , jadi cukup tutup Command Prompt dan buka lagi. Jika Anda menggunakan IDE, tutup dan buka kembali juga.

Lihat juga

carlos c.
sumber
7
Ini bekerja untuk saya, tetapi sebelum saya mencoba menambahkan lokasi di akhir string Path. Mengapa ini hanya bekerja di awal?
Eric H.
4
Terima kasih! ini bekerja untuk saya! @ Eric H: Menambahkan pada akhirnya berhasil untuk saya. Dari apa yang saya mengerti, ia melewati Path dari kiri ke kanan dan mencari javac.exe. Jadi mungkin Anda memilikinya di beberapa direktori yang di depan dan javac.exe yang tidak berfungsi.
Dao Lam
36
+1 untuk menutup baris perintah lalu membukanya kembali, itu berhasil untuk saya!
Sameh Deabes
Apakah masuk akal jika saya memiliki versi jdk dan jre yang berbeda di komputer saya?
Aaron Liu
Saya belajar banyak hal tentang sistem OS sambil mengatur variabel-variabel ini dan semua itu. Terima kasih
kawan
77

coba ini .. Saya sudah juga tetapi sekarang diselesaikan di XP ..

C:\ YourFolder >set path=C:\Program Files\Java\jdk1.7.0_09\bin;
C:\ YourFolder >javac YourCode.java
Ahmad Azwar Anas
sumber
45

Anda salah mengetik setperintah - Anda melewatkan garis miring terbalik setelahnya C:. Harus:

C:\>set path=C:\Program Files (x86)\Java\jdk1.7.0\bin
Raghuram
sumber
1
Saya melewatkan hal itu tetapi itu adalah kesalahan ketik saya ketika memposting kekhawatiran saya di sini. Saya memang memeriksanya dan semuanya dieja dengan benar tetapi masih memberi saya kesalahan yang sama.
user987137
1
@ user987137. Jelas, ada sesuatu yang salah. Apakah JDK (pikiran Anda - JDK bukan JRE) dipasang di lokasi yang ditentukan - C:\Program Files (x86)\Java\jdk1.7.0? Jika demikian, apa yang terjadi jika Anda melakukannya cd C:\Program Files (x86)\Java\jdk1.7.0\binkemudian javac -version?
Raghuram
3
Saya memiliki kesalahan yang sama ketika mengatur JDK pada Win XP meskipun saya memiliki set path yang benar. Cukup dengan menutup command prompt dan membukanya lagi, perbaiki.
Chris J
@ ChrisJ - Ini karena prompt perintah baru akan dimulai pada sesi baru dan karenanya juga memuat variabel lingkungan yang diperbarui.
Cyclonecode
17

Jalankan yang berikut ini dari command prompt: set Path="C:\Program Files\Java\jdk1.7.0_09\bin" atau set PATH="C:\Program Files\Java\jdk1.7.0_09\bin"

Saya sudah mencoba ini dan berfungsi dengan baik.

lebih segar
sumber
thx, ini bekerja pada Windows
Csaba
Jawaban yang bagus. Bekerja untuk saya di Windows 10
Roger
5

Jika perintah java berfungsi dan mendapatkan masalah dengan javac. lalu cek dulu di folder jdk file javac.exe direktori apakah ada atau tidak. Jika ada file javac.exe, tetapkan JAVA_HOMEsebagai variabel Sistem.

Umrao Rawat
sumber
3

Periksa variabel lingkungan Anda.

Dalam kasus saya, saya telah menetapkan JAVA_HOME dalam variabel Sistem dan juga dalam variabel Akun Pengguna saya dan yang terakhir diatur ke versi Java yang salah . Saya juga punya masalah yang sama dengan variabel Path.

Setelah menghapus JAVA_HOME dari variabel Akun Pengguna saya dan menghapus jalur yang salah dari variabel Path itu berfungsi dengan benar.

wabisabit
sumber