2016-05-29 23 views
5

sınıfında yükleyecektir. lombok java projeme eclipse içinde ekledim. Son iki satırı eclipse.ini dosyasında vmargs olarak eklememi istedi.Bu senaryoda classLoader sınıfları

-showlocation 
-vm 
/home/$USER/JavaSE8/jdk1.8/bin/java 
-startup 
plugins/org.eclipse.equinox.launcher_1.3.0.v20140415-2008.jar 
--launcher.library 
plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64_1.1.200.v20150204-1316 
-product 
org.eclipse.epp.package.jee.product 
--launcher.defaultAction 
openFile 
-showsplash 
org.eclipse.platform 
--launcher.XXMaxPermSize 
256m 
--launcher.defaultAction 
openFile 
--launcher.appendVmargs 
-vmargs 
-Dosgi.requiredJavaVersion=1.6 
-Xms500m 
-Xmx2g 
-Dorg.eclipse.swt.browser.XULRunnerPath='' 
-javaagent:/home/$USER/eclipse/4.4-luna-SR2/lombok.jar 
-Xbootclasspath/a:/home/$USER/eclipse/4.4-luna-SR2/lombok.jar 

Ben de libraries içinde lombok.jar ekledik (Proje -> Özellikler -> Kütüphaneler) ve ayrıca Düzeni ve İhracat sekmesinde en üst seviyeye lombok.jar taşındı Tutulma (Proje - -> Özellikler> Sipariş ve İhracat) ve JRE Sistem Kütüphanesi (rt.jar, resources.jar, vb.) Hepsi lombok.jar'un altındadır. eclipse başlatıldığında

  1. , Bootstrap classloader JRE dizindeki tüm JDK sınıfları yüklenmelidir: Ben lombok ana sınıfı olarak yüklenecek sırayı hakkında karıştı. (Ben Düzen ve İhracat kadar lombok.jar taşındı Fakat, JRE sistem kütüphaneleri yukarıda, lombok.jar sonra yüklenecek rt.jar olacaktır. Önyükleme kütüphaneleri olursa olsun her zaman ilk yüklenmelidir Çoğunlukla Hayır? Çünkü NE!) Biz bu yana

  2. Ayrıca -XBootstrapClasspath seçeneğini kullanarak bootstrap classpath yeniden tanımlı, lombok.jar Bootstrap Classloader yüklenecek.

  3. Bundan sonra Extensions classloader, JRE'nin lib \ ext dizinindeki sınıfları yükler. Sonra

  4. System-Classpath classloader yükler CLASSPATH'E ortam değişkeni tarafından belirtilen tüm sınıfları ve kavanozlar (bu yükleme dikkate kütüphanelerin Order and Export sipariş alır mı?)

ben yanlış burada işleri yorumlama ediyorum varsa düzeltin lütfen Ben sadece ClassLoading labirentini anlamaya çalışan yeni biriyim.

+0

@kdgregory Bu soruya cevap verebilir misiniz? – Ashley

+0

@Juned Ahsan Bu soruya cevap verebilir misiniz? – Ashley

+0

FYI: En azından 1.16.4 sürümünden beri, 'lombok.jar'ı bootclasspath'a eklemek artık gerekli değil. Kavanozu yalnızca ajan olarak eklemelisiniz. –

cevap

0

Sık sık "sipariş ve ihracat" dan söz edersiniz. Proje sınıf yolu iletişim kutusunda aynı adlandırılmış sekmeyi kastettiğinizi varsayalım. Bildiğim kadarıyla, bu projeye bağlı olan diğer projeler için sadece proje kütüphanesinin görünürlüğü ile ilgilidir. Tutulmanın kendisinin nasıl önyüklendiğini yapmak için hiçbir şey yoktur.

+0

Bu projeye bağlı olan diğer projeler için proje kütüphanesinin görünebilirliği hakkında yazdıklarınızı test ettim. Yani 2 tane var, lombok.jar kütüphanesi olarak eklemiş olduğum A & B projeleri. Ayrıca A, B'ye bağımlıdır. Hem A & B'de, Lombok'u kullandım. Lombok.jar'ı B kütüphanelerinden kaldırdım. Şimdi B'deki lombok ek açıklamaları kırmızı çizgilerle gösterilmiştir (tutulmada). – Ashley

+1

Siparişi değiştirdiğiniz anlaşılıyor. A yazarken B'ye bağımlıysa, daha sonra (A'dan değil) A projesinden jarı kaldırın ve kütüphanenin dışa aktarımını göstermek için B projesinin yapı yolunu ayarlayın. – Heri