javac dahili veya harici bir komut, çalıştırılabilir program veya toplu iş dosyası olarak tanınmıyor

Java programlarını derlemeye çalışırken bir hata ile karşılaşıyorum.

Windows kullanıyorum (bu Windows'a özgü bir sorun) ve en son JDK yüklü.

PATH` değişkenini içeren bir çözüm denedim, ancak hata devam ediyor.

Konsol çıktısı:

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.

TL;DR

Deneyimli okuyucular için:

  1. Java yolunu bulun; şöyle görünür: C:\Program Files\Java\jdkxxxx\bin`
  2. Seçenekler iletişim kutusunu açmak için Başlat menüsünde "ortam değişkeni" araması yapın.
  3. PATH`ı inceleyin. Eski Java yollarını kaldırın.
  4. Yeni Java yolunu PATH'e ekleyin.
  5. JAVA_HOME` dosyasını düzenleyin.
  6. Konsol/IDE`yi kapatın ve yeniden açın.

    Hoş geldiniz! Java'ya yeni başlayanların karşılaştığı en kötü şöhretli teknik sorunlardan biriyle karşılaştınız: 'xyz' dahili veya harici bir komut olarak tanınmıyor... hata mesajı. Özetle, Java'yı doğru bir şekilde yüklemediniz. Windows'ta Java kurulumunun tamamlanması bazı manuel adımlar gerektirir. JDK'yı yükselttikten sonra da dahil olmak üzere Java'yı yükledikten sonra bu adımları her zaman gerçekleştirmelisiniz.

    Ortam değişkenleri ve PATH

    (Bunu zaten anladıysanız, sonraki üç bölümü atlamaktan çekinmeyin.) javac HelloWorld.javayı çalıştırdığınızda, cmdjavac.exenin nerede olduğunu belirlemelidir. Bu, bir ortam değişkeni olanPATH` ile gerçekleştirilir. Bir [çevre değişkeni](https://en.wikipedia.org/wiki/Environment_variable) özel bir anahtar-değer çiftidir (örneğin windir=C:\WINDOWS). Çoğu işletim sistemiyle birlikte gelir ve bazıları sistemin düzgün çalışması için gereklidir. Bunların bir listesi her program başladığında (cmd dahil) programa aktarılır. Windows'da, iki tür vardır: kullanıcı ortam değişkenleri ve sistem ortam değişkenleri*. Ortam değişkenlerinizi şu şekilde görebilirsiniz:

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
...

En önemli değişken PATH. Bu, ; ile ayrılmış yolların bir listesidir. cmdye bir komut girildiğinde, listedeki her dizin eşleşen bir çalıştırılabilir dosya için taranacaktır. Benim bilgisayarımdaPATH` şöyledir:

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

javac HelloWorld.javayı çalıştırdığınızda, cmd,javacın bir [dahili komut](https://ss64.com/nt/syntax-internal.html) olmadığını fark ettikten sonra, [sistemPATHini ve ardından kullanıcıPATHini](https://superuser.com/questions/867728/user-vs-system-environment-variables-do-system-variables-override-user-variabl) arar. Listedeki her dizine mekanik olarak girer ve [javac.com,javac.exe,javac.bat, vb](https://www.nextofwindows.com/what-is-pathext-environment-variable-in-windows) olup olmadığını kontrol eder. javacı bulduğunda, onu çalıştırır. Bulamadığında, 'javac' dahili veya harici bir komut, çalıştırılabilir program veya toplu iş dosyası olarak tanınmıyor yazdırır. Java çalıştırılabilir dizinini PATH dizinine eklemeniz gerekir.

JDK vs. JRE

*(Bunu zaten anlıyorsanız, bu bölümü atlamaktan çekinmeyin.) Java'yı indirirken, size aşağıdakiler arasında bir seçenek sunulur:

  • Java programlarını çalıştırmak için gerekli araçları içeren Java Runtime Environment (JRE), ancak yeni programları derlemek için değildir - java içerir ancak javac içermez.
  • Java Geliştirme Kiti](https://en.wikipedia.org/wiki/Java_Development_Kit) (JDK), hem java hem de javac ile birlikte bir dizi başka geliştirme aracı içerir. JDK, JRE'nin bir üst kümesidir. JDK'yı yüklediğinizden emin olmalısınız**. Yalnızca JREyi yüklediyseniz, sabit diskinizde Java derleyicisinin bir yüklemesi olmadığındanjavac`ı çalıştıramazsınız. Windows programlar listenizi kontrol edin ve Java paketinin adında "Development Kit" kelimelerinin bulunduğundan emin olun.

    set kullanmayın

    *(Zaten planlamıyorsanız, bu bölümü atlamaktan çekinmeyin.) Diğer bazı cevaplar, bazı varyasyonların uygulanmasını önermektedir:

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

Yapma bunu. Bu komutla ilgili birkaç önemli sorun vardır:

  1. Bu komut PATHden diğer her şeyi siler ve Java yolu ile değiştirir. Bu komutu çalıştırdıktan sonra, diğer çeşitli komutların çalışmadığını görebilirsiniz.
  2. Java yolunuz muhtemelen C:\Program Files\Java\jdk1.7.0_09\bin değildir - neredeyse kesinlikle farklı bir yola sahip olan daha yeni bir JDK sürümüne sahipsiniz.
  3. Yeni PATH **sadece mevcut cmd oturumu için geçerlidir. Komut İstemi'ni her açtığınızda set komutunu yeniden girmeniz gerekecektir.
  4. ve 2. noktalar bu biraz daha iyi sürümle çözülebilir:
C:\>:: DON'T DO THIS EITHER
C:\>set PATH=C:\Program Files\Java\\bin;%PATH%

Ama genel olarak kötü bir fikir.

Java yolunu bul

Doğru yol, Java'yı nereye yüklediğinizi bulmakla başlar. Bu, Java'yı nasıl yüklediğinize bağlıdır.

Exe yükleyici

Java'yı bir kurulum programı çalıştırarak yüklediniz. Oracle'ın yükleyicisi Java sürümlerini C:\Program Files\Java\ (veya C:\Program Files (x86)\Java\) altına yerleştirir. Dosya Gezgini veya Komut İstemi ile bu dizine gidin. Her alt klasör bir Java sürümünü temsil eder. Eğer sadece bir tane varsa, onu buldunuz demektir. Aksi takdirde, daha yeni sürüme benzeyeni seçin. Klasör adının jdk ile başladığından emin olun (jre yerine). Dizini girin. Sonra bunun bin dizinini girin. Şimdi doğru dizindesiniz. Yolu kopyalayın. Dosya Gezgini'ndeyse adres çubuğuna tıklayın. Komut İstemi'ndeyse, copy komut istemini tıklayın. Ortaya çıkan Java yolu (tırnak işaretleri olmadan) şeklinde olmalıdır:

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

Zip dosyası

JDK içeren bir .zip dosyası indirdiniz. Yolunuza çıkmayacağı rastgele bir yere çıkarın; C:\Java\ kabul edilebilir bir seçimdir. Daha sonra bin klasörünü içinde bir yere yerleştirin. Artık doğru dizindesiniz. Yolunu kopyalayın. Bu Java yoludur. Yolu geçersiz kılacağı için klasörü asla taşımamayı unutmayın.

Ayarlar iletişim kutusunu açın

Bu, PATHı düzenlemek için kullanılan iletişim kutusudur. Windows sürümünüze, kullanıcı arayüzü ayarlarınıza ve sistem yapılandırmanızın ne kadar karışık olduğuna bağlı olarak bu iletişim kutusuna ulaşmanın birçok yolu vardır. Bunlardan bazılarını deneyin:

  • Başlat Menüsü/görev çubuğu arama kutusu » "ortam değişkeni&quot için arama yapın;
  • Win + R » control sysdm.cpl,,3
  • Win + R » SystemPropertiesAdvanced.exe » Ortam Değişkenleri
  • Dosya Gezgini » adres çubuğuna Denetim Masası\Sistem ve Güvenlik\Sistem yazın » Gelişmiş Sistem Ayarları (en solda, kenar çubuğunda) » Ortam Değişkenleri
  • Masaüstü » Bu PC'ye sağ tıklayın » Özellikler » Gelişmiş Sistem Ayarları » Ortam Değişkenleri
  • Başlat Menüsü » Bilgisayar » Özellikler » Gelişmiş Sistem Ayarları » Ortam Değişkenleri'ne sağ tıklayın
  • Denetim Masası (simge modu) » Sistem » Gelişmiş Sistem Ayarları » Ortam Değişkenleri
  • Denetim Masası (kategori modu) » Sistem ve Güvenlik » Sistem » Gelişmiş Sistem Ayarları » Ortam Değişkenleri
  • Masaüstü » Bilgisayarım » Gelişmiş » Ortam Değişkenleri'ne sağ tıklayın
  • Denetim Masası » Sistem » Gelişmiş » Ortam Değişkenleri Bunlardan herhangi biri sizi doğru ayarlar iletişim kutusuna götürmelidir. Windows 10 kullanıyorsanız, Microsoft size PATHı düzenlemek için süslü yeni bir kullanıcı arayüzü sunmuştur. Aksi takdirde, PATHı tek satırlık bir metin kutusuna sıkıştırılmış, noktalı virgülle kaplanmış tüm ihtişamıyla göreceksiniz. Sisteminizi bozmadan gerekli düzenlemeleri yapmak için elinizden geleni yapın.

    PATHı temizleyin

    PATH'a bakın. Neredeyse kesinlikle iki PATH değişkeniniz var (kullanıcı ve sistem ortam değişkenleri nedeniyle). Her ikisine de bakmanız gerekir. Diğer Java yollarını kontrol edin ve bunları kaldırın. Bunların varlığı her türlü çatışmaya neden olabilir. (Örneğin, PATH içinde sırasıyla JRE 8 ve JDK 11 varsa, javac sürüm 55 .class dosyaları oluşturacak olan Java 11 derleyicisini çağıracak, ancak java yalnızca 52 sürümüne kadar destekleyen Java 8 JVM'yi çağıracak ve desteklenmeyen sürüm hataları ile karşılaşacak ve herhangi bir programı derleyip çalıştıramayacaksınız). Bu sorunları PATH içinde yalnızca bir Java yolunuz olduğundan emin olarak ortadan kaldırın. Ve bunu yaparken, eski Java sürümlerini kaldırın da yapabilirsiniz. Ve unutmayın ki hem JDK hem de JRE'ye sahip olmanıza gerek yok. Eğer C:\ProgramData\Oracle\Java\javapath dosyanız varsa, onu da kaldırın**. Oracle, Java yollarının yükseltmelerden sonra bozulması sorununu, her zaman en son Java yüklemesine işaret edecek bir sembolik bağlantı oluşturarak çözmeyi amaçlamıştır. Ne yazık ki, genellikle yanlış konuma işaret ediyor veya basitçe çalışmıyor. Bu girdiyi kaldırmak ve Java yolunu manuel olarak yönetmek daha iyidir. Şimdi PATH üzerinde genel temizlik yapmak için de iyi bir fırsat. Bilgisayarınızda artık yüklü olmayan yazılımlarla ilgili yollar varsa, bunları kaldırabilirsiniz. Ayrıca yolların sırasını da karıştırabilirsiniz (eğer bu gibi şeylere önem veriyorsanız).

    PATH'e ekle

    Şimdi üç adım önce bulduğunuz Java yolunu alın ve sistem PATHine yerleştirin. Yeni yolunuzun listenin neresinde olduğu önemli değildir; en sona yerleştirmek iyi bir seçimdir. Windows 10 öncesi kullanıcı arayüzünü kullanıyorsanız, noktalı virgülleri doğru yerleştirdiğinizden emin olun. Listedeki her yolu ayıran tam bir tane olmalıdır. Burada gerçekten söylenecek fazla bir şey yok. Basitçe yolu `PATH'e ekleyin ve Tamam'a tıklayın.

    Set JAVA_HOME

    Hazır eliniz değmişken JAVA_HOME ayarını da yapabilirsiniz. Bu, Java yolunu da içermesi gereken başka bir ortam değişkenidir. Popüler Java derleme sistemi Gradle dahil olmak üzere birçok Java ve Java dışı program, doğru ayarlanmamışsa hata verecektir. Eğer JAVA_HOME mevcut değilse, bunu yeni bir sistem ortam değişkeni olarak oluşturun. Bunu PATH içine eklediğiniz aynı Java yoluna ayarlayın. Javayı yükselttikten sonra daJAVA_HOME`u düzenlemeyi unutmayın.

    Komut İstemi'ni kapatın ve yeniden açın

    PATHı değiştirmiş olmanıza rağmen, cmd de dahil olmak üzere çalışan tüm programlar yalnızca eskiPATH`ı görür. Bunun nedeni, tüm ortam değişkenlerinin listesinin yalnızca program çalışmaya başladığında programa kopyalanmasıdır; bundan sonra program yalnızca önbelleğe alınmış kopyaya başvurur. cmd'nin ortam değişkenlerini yenilemenin](https://stackoverflow.com/questions/171588/is-there-a-command-to-refresh-environment-variables-from-the-command-prompt-in-w) iyi bir yolu yoktur, bu nedenle Komut İstemi'ni kapatıp tekrar açmanız yeterlidir. Eğer bir IDE kullanıyorsanız, onu da kapatıp yeniden açın.

    Ayrıca bakınız

  • PATH ve diğer ortam değişkenleri nedir ve bunları nasıl ayarlayabilir veya kullanabilirim?
  • PATH sistem değişkenini nasıl ayarlayabilirim veya değiştirebilirim?
  • Windows'ta yol ve ortam değişkenleri nasıl ayarlanır
  • Windows 10'da Path ortam değişkenleri nasıl ayarlanır
Yorumlar (5)

Setkomutunu yanlış yazdınız -C:`'den sonraki ters eğik çizgiyi atladınız. Öyle olmalı:

C:\>set path=C:\Program Files (x86)\Java\jdk1.7.0\bin
Yorumlar (4)

Eğer java komutu çalışıyor ve javac ile sorun yaşıyorsanız. ilk olarak jdk'nın bin dizininde javac.exe dosyasının olup olmadığını kontrol edin. Eğer javac.exe dosyası mevcutsa, Sistem değişkeni olarak JAVA_HOME ayarlayın.

Yorumlar (0)