2016-05-29 16 views
5

Dodałem lombok do mojego projektu java w eclipse. Wymagało to dodania dwóch ostatnich wierszy w pliku eclipse.ini jako vmargs.Porządek, w którym klasaLoader będzie ładować klasy w tym scenariuszu

-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 

Dodałem także lombok.jar w libraries (Project -> Właściwości -> Biblioteki), a także poruszane lombok.jar do najwyższego poziomu w porządku i karcie Export (Project -> Właściwości -> Zamówienia i eksport) w Eclipse i Biblioteki systemowe JRE (rt.jar, resources.jar itd.) Wszystkie są poniżej lombok.jar. Jestem mylić o kolejności, w jakiej lombok Główna klasa zostanie załadowany jako:

  1. Kiedy eclipse jest uruchomieniu Bootstrap classloader powinny załadowanie wszystkich klas JDK w katalogu JRE. (Ale odkąd przeniósł lombok.jar się w porządku i eksport, przede bibliotek systemowych JRE, będzie rt.jar być załadowany po lombok.jar. Głównie Nie? Bo biblioteki bootstrap zawsze powinien być ładowany pierwszy nie wiem co!)

  2. Ponieważ również przedefiniowano opcję bootstrap classpath przy użyciu opcji -XBootstrapClasspath, plik lombok.jar zostanie załadowany przez Bootstrap Classloader.

  3. Po tym Extensions classloader ładuje klasy w katalogu lib \ ext środowiska JRE.

  4. Następnie System-Classpath classloader ładuje wszystkie klasy i słoików określonych przez zmienną środowiskową CLASSPATH (czy to ładowanie uwzględnia Order and Export kolejność bibliotek?)

Proszę mnie poprawić, jeśli jestem błędnie interpretując rzeczy tutaj jako że jestem po prostu początkującym, próbującym zrozumieć labirynt ClassLoading.

+0

@kdgregory Czy możesz odpowiedzieć na to pytanie? – Ashley

+0

@Juned Ahsan Czy możesz odpowiedzieć na to pytanie? – Ashley

+0

FYI: Od co najmniej wersji 1.16.4, nie ma już potrzeby dodawania "lombok.jar" do bootclasspath w ogóle. Wystarczy dodać słoik jako agent. –

Odpowiedz

0

Często wymieniasz "zamówienie i wywóz". Zakładam, że masz na myśli tę samą nazwaną kartę w oknie dialogowym ścieżki klas projektu. O ile mi wiadomo, dotyczy to jedynie widoczności biblioteki projektów dla innych projektów zależnych od tego projektu. Nie ma nic wspólnego z tym, jak samo zaćmienie jest bootstrapped.

+0

Testowałem, co napisałeś o widoczności biblioteki projektów dla innych projektów, które zależą od tego projektu. Mam więc 2, powiedzmy, projekty A & B, do których dodałem lombok.jar jako biblioteki. Również A jest zależne od B. W obu A i B użyłem Lombok. Usunąłem plik lombok.jar z bibliotek B. Teraz adnotacje lombokowe w B zostały pokazane czerwonymi liniami (w zaćmieniu). – Ashley

+1

Wygląda na to, że zamieniłeś zamówienie. Jeśli A jest zależne od B podczas pisania, usuń słoik z projektu A (a nie z B) i dostosuj ścieżkę budowania projektu B, aby pokazać eksport biblioteki. – Heri

Powiązane problemy