Ich habe heute Lombok getroffen .
Ich bin sehr gespannt, wie es funktioniert.
Ein Java Geek-Artikel gibt einige Hinweise, aber mir ist nicht ganz klar:
Java 6 entfernt apt und macht javac in der Lage, Anmerkungen zu verwalten, wodurch der Prozess optimiert wird, um ein einfacheres Einzelschritt-Computing zu erhalten. Dies ist der Weg, den Lombok eingeschlagen hat.
Vielleicht lautet der Kompilierungsprozess mit Java 6: javac -> apt -> lombok apt-Prozess -> Klassendateien lesen und Set / Get-Methoden mit ASM hinzufügen ?
Können Sie mir mehr Details zum Mechanismus zeigen?
java
annotations
lombok
uuidcode
quelle
quelle
Antworten:
Lombok codiert tatsächlich gegen die interne API, wie Sean Patrick Floyd sagte. Da Lombok jedoch NUR an der Kompilierungsphase beteiligt ist, wird die irreführende Behauptung, Lombok sei nur auf einer Sun-VM ausgeführt. Es wird nur auf ecj oder sun's javac kompiliert. Die überwiegende Mehrheit der VMs da draußen, wenn sie überhaupt einen Compiler ausliefern, ist eine dieser beiden. Zum Beispiel wird die Apple VM mit serienmäßigem Sun Javac ausgeliefert, und als solches funktioniert Lombok auf Macs einwandfrei. Gleiches gilt zum Beispiel für die Soylatte VM.
Während wir für javac wirklich bei ihren Updates bleiben müssen, teilweise aufgrund der vielen laufenden Arbeiten an ihrem Compiler, mussten wir unsere Eclipse-Unterstützung über viele verschiedene Versionen von Eclipse nur geringfügig anpassen. Während wir also gegen die interne API codieren, sind sie relativ stabile Bits.
Wenn das, was lombok tut, ohne auf die interne API zurückgreifen könnte, hätten wir etwas anderes getan, aber es kann nicht getan werden, also greifen wir auf die interne API-Verwendung zurück.
NB: Ich bin einer der Hauptentwickler von Lombok, also bin ich wahrscheinlich ein wenig voreingenommen: P.
quelle
Es verwendet die in Java 6 verfügbare JSR 269 Pluggable Annotation Processing API .
Beachten Sie, dass
lombok.jar
eine Datei mit dem Namen enthält/META-INF/services/javax.annotation.processing.Processor
. Wennjavac
diese Datei in einem Kompilierungsklassenpfad angezeigt wird, werden dort während der Kompilierung definierte Anmerkungsprozessoren ausgeführt.quelle
Als Ergänzung zu Axtavts Antwort: Lombok verwendet viel mehr als die JSR 269-API. Lombok-Codes gegen a) interne Javac-Apis und b) interne Eclipse-Apis (in einem separaten Prozessor). Mit JSR 269 können Sie vorhandenen Quellcode nicht ändern. Wenn Sie jedoch einen
Element
in den zugrunde liegenden AST-Knoten umwandeln, können Sie den AST tatsächlich ändern (wie es das Projekt Lombok tut).So Lombok ist ein großer Hack, nur wird
laufenKompilierung auf einer Sun VM (afaik). Es ist eine großartige Software, aber es wird auch von vielen gehasst, weil sie so ein nicht standardmäßiger Hack ist.quelle
Projekt Lombok: Das Erstellen benutzerdefinierter Transformationen ist hilfreich.
quelle