Java uygulamamı çalıştırdığımda NoClassDefFoundError
hatası alıyorum. Bunun nedeni genellikle nedir?
Bunun derleme zamanı ile çalışma zamanı arasındaki sınıf yolu uyumsuzluğundan kaynaklanması mümkün olsa da, bu her zaman doğru değildir.
Bu durumda iki ya da üç farklı istisnayı aklımızda tutmamız önemlidir:
java.lang.ClassNotFoundException
Bu istisna, sınıfın sınıf yolunda bulunamadığını gösterir. Bu, sınıf tanımını yüklemeye çalıştığımızı ve sınıfın sınıf yolunda bulunmadığını gösterir.
java.lang.NoClassDefFoundError
Bu istisna, JVM'nin dahili sınıf tanımı veri yapısında bir sınıfın tanımını aradığını ve bulamadığını gösterir. Bu, sınıf yolundan yüklenemediğini söylemekten farklıdır. Genellikle bu, daha önce sınıf yolundan bir sınıf yüklemeyi denediğimizi, ancak bir nedenden dolayı başarısız olduğunu gösterir - şimdi sınıfı tekrar kullanmaya çalışıyoruz (ve bu nedenle, geçen sefer başarısız olduğu için yüklememiz gerekiyor), ancak daha önce yüklemeyi başaramadığımız için (ve makul bir şekilde tekrar başarısız olacağımızdan şüphelendiğimiz için) yüklemeyi denemeyeceğiz bile. Daha önceki başarısızlık bir ClassNotFoundException veya bir ExceptionInitializerError (statik başlatma bloğundaki bir başarısızlığı gösterir) veya başka herhangi bir sorun olabilir. Burada önemli olan nokta, NoClassDefFoundError hatasının mutlaka bir sınıf yolu sorunu olmamasıdır.
Kod, çalışma zamanında bulunan sınıfın uyumsuz bir sürümüyle derlendiğinde bazen NoClassDefFound hatası aldığımı fark ettim. Hatırladığım özel örnek apache axis kütüphanesi ile ilgili. Çalışma zamanı sınıf yolumda aslında 2 sürüm vardı ve doğru olanı değil, güncel olmayan ve uyumsuz sürümü seçerek NoClassDefFound hatasına neden oluyordu. Bu, buna benzer bir komut kullandığım bir komut satırı uygulamasındaydı.
set classpath=%classpath%;axis.jar
Kullanarak doğru sürümü almasını sağlayabildim:
set classpath=axis.jar;%classpath%;