2016-05-29 11 views
5

Ich habe lombok zu meinem Java-Projekt in eclipse hinzugefügt. Ich musste die letzten beiden Zeilen in als vmargs hinzufügen.Reihenfolge, in der classLoader Klassen in diesem Szenario laden wird

-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 

Ich habe auch lombok.jar in libraries hinzugefügt (Projekt -> Eigenschaften -> Bibliotheken) und bewegt auch lombok.jar auf der obersten Ebene in Ordnung und Registerkarte Export (Projekt -> Eigenschaften -> Auftrag und Export) in Eclipse und Die JRE-Systembibliothek (rt.jar, resources.jar usw.) befindet sich unter lombok.jar. Ich bin verwirrt über die Reihenfolge, in der lombok Hauptklasse wird als geladen:

  1. Wenn eclipse gestartet wird, die Bootstrap Classloader sollten alle JDK-Klassen im Verzeichnis von JRE laden. (Aber da ich lombok.jar oben in Ordnung und Export, über JRE Systembibliotheken bewegt habe, wird rt.jar nach lombok.jar geladen werden. Meistens Nein? Weil Bootstrap-Bibliotheken sollten immer zuerst nicht geladen werden, ganz gleich, was!)

  2. Da wir Außerdem wurde bootstrap classpath mithilfe der Option -XBootstrapClasspath neu definiert, lombok.jar wird von Bootstrap Classloader geladen.

  3. Danach lädt Extensions classloader die Klassen im Verzeichnis lib \ ext der JRE.

  4. Dann System-Classpath classloader lädt alle Klassen und durch die Umgebungsvariable CLASSPATH angegebenen Gläser (Ist diese Belastung berücksichtigt die Order and Export Reihenfolge der Bibliotheken?)

Bitte korrigieren Sie mich, wenn ich falsch bin Dinge hier zu interpretieren wie ich bin nur Neuling versucht, das ClassLoading Labyrinth zu verstehen.

+0

@kdgregory Können Sie diese Frage bitte beantworten? – Ashley

+0

@Juned Ahsan Können Sie bitte diese Frage beantworten? – Ashley

+0

FYI: Seit mindestens Version 1.16.4 ist es nicht mehr notwendig, dem bootclasspath 'lombok.jar' hinzuzufügen. Sie müssen das Glas nur als Agent hinzufügen. –

Antwort

0

Sie erwähnen oft die "Bestellung und Export". Ich nehme an, Sie meinen die gleichnamige Registerkarte im Projektklassenpfad-Dialog. Soweit ich weiß, betrifft dies nur die Sichtbarkeit der Projektbibliothek für andere Projekte, die von diesem Projekt abhängen. Es hat nichts zu tun, wie Eclipse selbst bootstrapped wird.

+0

Ich habe getestet, was Sie über Sichtbarkeit der Projektbibliothek für andere Projekte geschrieben haben, die von diesem Projekt abhängen. Also ich habe 2, sagen A & B Projekte, zu denen ich lombok.jar als Bibliotheken hinzugefügt habe. Auch A ist abhängig von B. In A & B habe ich Lombok benutzt. Ich habe lombok.jar aus Bs Bibliotheken entfernt. Nun wurden die Lombok-Annotationen in B mit roten Linien (in Eclipse) dargestellt. – Ashley

+1

Es scheint, Sie haben die Reihenfolge vertauscht. Wenn A während des Schreibens von B abhängig ist, entfernen Sie das Glas aus Projekt A (und nicht aus B) und passen Sie den Erstellungsverlauf von Projekt B so an, dass der Export der Bibliothek angezeigt wird. – Heri

Verwandte Themen