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.
Deneyimli okuyucular için:
PATH
'e ekleyin.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.
PATH
(Bunu zaten anladıysanız, sonraki üç bölümü atlamaktan çekinmeyin.)
javac HelloWorld.javayı çalıştırdığınızda, cmd
javac.exenin nerede olduğunu belirlemelidir. Bu, bir ortam değişkeni olan
PATH` 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ımda
PATH` şö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, [sistem
PATHini 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.
*(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
içerir ancak javac
içermez.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ığından
javac`ı ç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:
PATH
den 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.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.PATH
**sadece mevcut cmd oturumu için geçerlidir. Komut İstemi'ni her açtığınızda set
komutunu yeniden girmeniz gerekecektir.C:\>:: DON'T DO THIS EITHER
C:\>set PATH=C:\Program Files\Java\<enter the correct Java folder here>\bin;%PATH%
Ama genel olarak kötü bir fikir.
Doğru yol, Java'yı nereye yüklediğinizi bulmakla başlar. Bu, Java'yı nasıl yüklediğinize bağlıdır.
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\
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.
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:
control sysdm.cpl,,3
SystemPropertiesAdvanced.exe
» Ortam DeğişkenleriDenetim Masası\Sistem ve Güvenlik\Sistem
yazın » Gelişmiş Sistem Ayarları (en solda, kenar çubuğunda) » Ortam DeğişkenleriPATH
ı 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
ı temizleyinPATH'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 PATH
ine 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.
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 da
JAVA_HOME`u düzenlemeyi unutmayın.
PATHı değiştirmiş olmanıza rağmen, cmd de dahil olmak üzere çalışan tüm programlar yalnızca eski
PATH`ı 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.
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.