SINIF YOLU: CLASSPATH, Application ClassLoader tarafından .class dosyalarını bulmak ve yüklemek için kullanılan bir ortam değişkenidir. CLASSPATH, Java platformunun uzantısı veya parçası olmayan üçüncü taraf ve kullanıcı tanımlı sınıfları bulmak için yolu tanımlar. CLASSPATH'i ayarlarken .class dosyalarını ve JAR dosyalarını içeren tüm dizinleri dahil edin.
Aşağıdaki durumlarda CLASSPATH'i ayarlamanız gerekir:
toplayıcı dolu
- Geçerli dizinde veya herhangi bir alt dizinde bulunmayan bir sınıfı yüklemeniz gerekir.
- Uzantılar mekanizması tarafından belirtilen konumda olmayan bir sınıfı yüklemeniz gerekir.
CLASSPATH, CLASSPATH'i ne ayarladığınıza bağlıdır. CLASSPATH'in sonunda bir dizin adı veya dosya adı bulunur. Aşağıdaki noktalar CLASSPATH'in sonunun ne olması gerektiğini açıklamaktadır.
- Bir JAR veya zip ise dosya sınıf dosyaları içeriyorsa CLASSPATH, zip veya JAR dosyasının adıyla biter.
- Sınıf dosyaları isimsiz bir pakete yerleştirilirse CLASSPATH, sınıf dosyalarını içeren dizinle biter.
- Sınıf dosyaları adlandırılmış bir pakete yerleştirilirse CLASSPATH, tam paket adındaki kök paketi içeren dizinle, yani tam paket adındaki ilk paketle biter.
CLASSPATH'in varsayılan değeri bir noktadır (.). Aranan tek geçerli dizin anlamına gelir. CLASSPATH değişkenini ayarladığınızda veya -classpath komutunu (kısaca -cp için) kullandığınızda, CLASSPATH'in varsayılan değeri geçersiz kılınır. Geçerli dizini arama yoluna dahil etmek istiyorsanız, yeni ayara bir nokta (.) koyun.
CLASSPATH geçerli dizinde bulunan bir sınıf dosyası bulursa, sınıfı yükleyecek ve yine CLASSPATH'de bulunan başka bir dizinde bulunan sınıfın aynı adı ne olursa olsun onu kullanacaktır.
Birden fazla sınıf yolu ayarlamak istiyorsanız, her CLASSPATH'i noktalı virgülle (;) ayırmanız gerekir.
JVM'yi kullanan üçüncü taraf uygulamalar (MySQL ve Oracle), kullandıkları kitaplıkları içerecek şekilde CLASSPATH ortam değişkenini değiştirebilir. Sınıflar dizinlerde veya arşiv dosyalarında saklanabilir. Java platformunun sınıfları rt.jar'da saklanır.
CLASSPATH'i ayarlamanın iki yolu vardır: Komut İstemi yoluyla veya Ortam Değişkenini ayarlayarak.
MySQL veritabanının CLASSPATH'inin nasıl ayarlanacağını görelim:
Aşama 1: Windows düğmesine tıklayın ve Denetim Masası'nı seçin. Sistem'i seçin.
Adım 2: Tıklamak Gelişmiş sistem Ayarları .
Java'da matematiksel yöntemler
Aşama 3: Bir iletişim kutusu açılacaktır. Ortam Değişkenleri'ne tıklayın.
Adım 4: CLASSPATH Sistem Değişkenlerinde zaten mevcutsa, Düzenle düğmesine tıklayın ve sonuna noktalı virgül (;) koyun. MySQL-Connector Java.jar dosyasının Yolunu yapıştırın.
Sistem Değişkenlerinde CLASSPATH yoksa, Yeni düğmesine tıklayın ve Değişken adını CLASSPATH olarak ve Değişken değerini de yazın. C:Program FilesJavajre1.8MySQL-Connector Java.jar;.;
Unutmayın: Koy ;.; CLASSPATH'in sonunda.
PATH ve CLASSPATH arasındaki fark
YOL | SINIFPATH |
---|---|
PATH bir ortam değişkenidir. | CLASSPATH aynı zamanda bir ortam değişkenidir. |
Çalıştırılabilir dosyaları (.exe) bulmak için işletim sistemi tarafından kullanılır. | .class dosyasını bulmak için Application ClassLoader tarafından kullanılır. |
.exe dosyalarını içeren dizini eklemeniz gerekir. | .class ve JAR dosyalarını içeren tüm dizinleri eklemeniz gerekmektedir. |
PATH ortam değişkeni bir kez ayarlandıktan sonra geçersiz kılınamaz. | CLASSPATH ortam değişkeni, hem javac hem de java komutu için -cp veya -CLASSPATH komut satırı seçeneği kullanılarak geçersiz kılınabilir. |
Windows'ta Komut İstemi Kullanılarak CLASSPATH Nasıl Ayarlanır
Komut İsteminize aşağıdaki komutu yazın ve enter tuşuna basın.
set CLASSPATH=%CLASSPATH%;C:Program FilesJavajre1.8 t.jar;
Yukarıdaki komutta Set, kullanıcının değişken değerini değiştirmesine olanak tanıyan dahili bir DOS komutudur. CLASSPATH bir değişken adıdır. Yüzde işaretinin (%) içine alınan değişken mevcut bir ortam değişkenidir. Noktalı virgül bir ayırıcıdır ve (;)'den sonra rt.jar dosyasının YOLU vardır.
java swing eğitimi
Java'da ext klasörü nasıl çalışır?
Ext dizini biraz CLASSPATH'e benzer şekilde çalışır. ext dizini sınıf yükleme mekanizmasının bir parçasıdır. Ext dizinindeki JAR'larda bulunan sınıflar Java uygulamaları tarafından kullanılabilir.
Aşağıdaki tabloda CLASSPATH ve Uzatma Mekanizması arasındaki temel fark gösterilmektedir:
Özellikler | SINIFPATH | Uzatma Mekanizması |
---|---|---|
Sınıf yükleme sırası | CLASSPATH, önyükleme ve uzantı yüklemesinden sonra yüklenir. | önyükleme yüklemesinden sonra ancak CLASSPATH yüklemesinden önce harici yükler. |
Kapsam | Bu, uygulamaya özel bir uygulamadır. Ana bilgisayardaki tüm JRE'ler CLASSPATH ortam değişkenidir. | Tüm JVM'ler belirli JRE java.ext.dirs dosyasında çalışır. |
Paket ismi | java.class.path, sınıf dosyalarını içeren dizinleri ve JAR arşivlerini bulmak için kullanılır. | java.ext.dirs, uzantı mekanizmasının sınıfları nereye yüklediğini belirtmek için kullanılır. |
Şartname | Extension.jar ve .class dosyalarını içeren dizin dahil olmak üzere ada göre belirtilir. | Belirtilen dizinlerdeki tüm JAR dosyaları yüklenir. |
Mekanizma, dosya .jar uzantısına sahip olmasa bile tüm .jar dosyalarını uzantı dizininden alacaktır. Bunun uygulaması, sınıf yolu dizinine yerleştirilen bir kavanozun adının .jar dışında bir uzantıya sahip olacak şekilde değiştirilebilmesidir. Joker karakter (*) bunu algılamaz. Bu teknik, uzantı dizini ile çalışmaz.
Bir örnek üzerinden yürütme sürecini anlayalım.
A.java
public class A { public String toString() { return 'hello'; } }
B.java
public class B { public static void main(final String[] args) { System.out.println(new A()); } }
A.java dosyasını derleyin. derlenmiş A.class dosyasını A.jar'a arşivleyeceğiz. Bu JAR dosyasını derlenmiş B.class dosyasından başka bir dizine yerleştirin.
Sınıf yolunun kullanımını göstermek için, A.jar dosyasını C:JavaPrograms dizinine yerleştiririz ve B'nin kullanması için bu JAR'a joker karakter (*) aracılığıyla erişiriz.
Mevcut dizinden sildiğimiz halde B'nin A.sınıfını hala yükleyebildiğini gördük. Java başlatıcısı açıkça C:JavaProgram için arandı. Aynı dizinde ve açık sınıf yolu belirtiminde bulunmadan da sınıfın yüklenmesi mümkündür.
Genellikle uzantı mekanizmasını kullanmanın bir faydası olarak anılır çünkü bu JRE'yi kullanan tüm uygulamalar aynı sınıfları sınıf yolunda açıkça belirtmeye gerek kalmadan görebilir.
Aynı CLASSPATH referanslı dizinde A.jar'ın adını A.backup olarak değiştirirsek ne olur? Aynısını yaptığımızda NoClassDefFoundError ile karşılaşıyoruz çünkü CLASSPATH referansı .jar uzantısına sahip değil.
dize oluşturucu java