Classpath, Java makinesi ve derleyicisinin bir uygulama başlatıldığında sınıfları ve kaynakları aradığı dizinler, JAR ve ZIP arşivlerinin listesini tanımlayan bir parametredir.
Konu hakkında:
Java'nın ortaya çıktığı andan itibaren, sıklıkla farklı dizinlerde bulunan çok sayıda sınıfın yüklenmesini organize etme ihtiyacı doğmuştur. Bunun için, bağımlılıkların aranacağı yerleri esnek bir şekilde belirlemeye olanak tanıyan classpath geliştirilmiştir.
Sorun:
Eğer classpath yanlış ayarlanırsa, uygulama gerekli sınıfları bulamayacak ve bu da yükleme hatalarına yol açacaktır (örneğin, ClassNotFoundException veya NoClassDefFoundError).
Çözüm:
Classpath, CLASSPATH çevre değişkeni, komut satırı parametresi -cp veya -classpath ile tanımlanabilir. Uygulamanın çalışması için gerekli olan tüm dizinleri ve JAR dosyalarını açıkça belirtmek önemlidir. Classpath ile bir başlatma örneği:
java -cp ".;lib/*" com.example.Main
Temel özellikler:
; (Windows) veya : (Linux/macOS) ile belirtilebilirlib/* — lib klasöründeki tüm JAR'larJava, classpath'te belirtilmemiş sınıfları kendiliğinden bulabilir mi?
Hayır, Java, belirtilen classpath dışında otomatik olarak sınıfları aramaz. Her yol açıkça belirtilmeli veya derleme veya başlatma aşamasında eklenmelidir.
Classpath'teki yolların sırası, sınıfların yüklenmesini etkiler mi?
Evet, sınıf isimleri çakıştığında, ilk belirtilen yoldaki sınıf bulunur. Sıra, sürüm çatışmalarını önlemek için önemlidir.
Uygulama başlatıldıktan sonra classpath'e yeni bir JAR eklenebilir mi?
Hayır, classpath'in standart mekanizması JVM başlatıldıktan sonra statiktir. Yeni sınıfları dinamik olarak yüklemek özel ClassLoader'lar gerektirir.
Java uygulaması -cp lib/mylib.jar parametresiyle başlatılıyor ancak test yapılandırma klasörü eklemeyi unutuyor. Sonuç olarak, kütüphane mevcut olmasına rağmen uygulama hata vererek çöküyor.
Artılar:
Eksiler:
Bağımlılıklara dayanarak classpath'i kendiliğinden oluşturan maven/gradle kullanılıyor. Başlatma, wrapper-betik ile gerçekleştiriliyor.
Artılar:
Eksiler: