Conocí a lombok hoy.
Estoy muy ansioso por saber cómo funciona.
Un artículo de Java Geek da algunas pistas, pero no me queda perfectamente claro:
Java 6 elimina apt y hace que javac pueda administrar anotaciones, agilizando el proceso para obtener una informática de un solo paso más simple. Este es el camino tomado por Lombok.
Tal vez con Java 6 el proceso de compilación será: javac -> apt -> lombok apt process -> leer archivos de clase y agregar métodos set / get usando ASM ?
¿Podría mostrarme más detalles sobre el mecanismo?
java
annotations
lombok
uuidcode
fuente
fuente
Respuestas:
Lombok efectivamente codifica contra API interna, como dijo Sean Patrick Floyd. Sin embargo, como lombok es SOLO involucrado en la fase de compilación, es engañoso afirmar que Lombok solo se ejecutará en una VM de sol. Solo se compilará en ecj o sun's javac. Sin embargo, la gran mayoría de las máquinas virtuales, si es que envían un compilador, son una de esas dos. Por ejemplo, la VM de Apple se envía con stock javac de Sun, y como tal, lombok funciona bien en Mac. Lo mismo ocurre con la VM Soylatte, por ejemplo.
Mientras que para javac realmente tenemos que seguir con sus actualizaciones, en parte debido a una gran cantidad de trabajo en curso en su compilador en este momento, hemos tenido que hacer solo 1 ajuste menor a nuestro soporte de eclipse en muchas versiones de eclipse. Entonces, si bien hacemos código contra API interna, son bits relativamente estables.
Si lo que hace lombok se pudiera hacer sin recurrir a la API interna, habríamos hecho otra cosa, pero no se puede hacer, por lo que recurrimos al uso interno de la API.
NB: Soy uno de los desarrolladores principales de lombok, así que probablemente soy un poco parcial: P
fuente
Utiliza la API de procesamiento de anotaciones conectables JSR 269 disponible en Java 6.
Tenga en cuenta que
lombok.jar
contiene un archivo llamado/META-INF/services/javax.annotation.processing.Processor
. Cuandojavac
ve este archivo en una ruta de clase de compilación, ejecuta procesadores de anotaciones definidos allí durante la compilación.fuente
Además de la respuesta de axtavt: Lombok usa mucho más de lo que expone la API JSR 269. Lombok codifica contra a) apis internos de javac yb) apis internos de eclipse (en un procesador separado). JSR 269 no le permite modificar el código fuente existente, pero cuando emite un
Element
nodo AST subyacente, puede modificar el AST (que es lo que hace el proyecto Lombok).Por lo tanto, Lombok es un gran truco que solo se
ejecutarácompilar en un Sun VM (afaik). Es una gran pieza de software, pero también es odiada por muchos por ser un hack no tan estándar.fuente
Proyecto Lombok: Crear transformaciones personalizadas es útil.
fuente