J'ai rencontré Lombok aujourd'hui.
J'ai très hâte de savoir comment cela fonctionne.
Un article de Java Geek donne quelques indices mais ce n'est pas parfaitement clair pour moi:
Java 6 supprime apt et rend javac capable de gérer les annotations, rationalisant le processus pour obtenir un calcul en une seule étape plus simple. C'est le chemin emprunté par Lombok.
Peut-être qu'avec Java 6, le processus de compilation sera: javac -> apt -> lombok apt process -> lire les fichiers de classe et ajouter des méthodes set / get en utilisant ASM ?
Pouvez-vous me montrer plus de détails sur le mécanisme?
java
annotations
lombok
uuidcode
la source
la source
Réponses:
Lombok code en effet contre l'API interne, comme l'a dit Sean Patrick Floyd. Cependant, comme lombok est UNIQUEMENT impliqué dans la phase de compilation, il est trompeur de prétendre que Lombok ne fonctionnera que sur une VM Sun. Il ne compilera que sur ecj ou javac de sun. Cependant, la grande majorité des machines virtuelles, si elles contiennent un compilateur, sont l'une de ces deux. Par exemple, la machine virtuelle Apple est livrée avec sun javac, et en tant que tel, lombok fonctionne très bien sur les macs. Il en va de même pour la machine virtuelle soylatte, par exemple.
Alors que pour javac, nous devons vraiment nous en tenir à leurs mises à jour, en partie à cause de beaucoup de travail en cours sur leur compilateur en ce moment, nous n'avons dû faire qu'un seul ajustement mineur à notre prise en charge d'éclipse sur de nombreuses versions d'eclipse. Ainsi, alors que nous codons contre l'API interne, ce sont des bits relativement stables.
Si ce que fait lombok pouvait être fait sans recourir à l'API interne, nous aurions fait autre chose, mais cela ne peut pas être fait, nous avons donc recours à l'utilisation de l'API interne.
NB: je suis l'un des principaux développeurs de lombok, donc, je suis probablement un peu biaisé: P
la source
Il utilise l' API JSR 269 Pluggable Annotation Processing disponible dans Java 6.
Notez que
lombok.jar
contient un fichier nommé/META-INF/services/javax.annotation.processing.Processor
. Lorsqu'iljavac
voit ce fichier dans un chemin de classe de compilation, il exécute les processeurs d'annotation qui y sont définis lors de la compilation.la source
En complément à la réponse d'axtavt: Lombok utilise beaucoup plus que ce que l'API JSR 269 expose. Lombok code contre a) les API javac internes et b) les API Eclipse internes (dans un processeur séparé). JSR 269 ne vous permet pas de modifier le code source existant, mais lorsque vous transtypez un
Element
vers le nœud AST sous-jacent, vous pouvez en fait modifier l'AST (ce que fait le projet Lombok).Donc Lombok est un énorme hack qui ne
fonctionneraque sur une machine virtuelle Sun (afaik). C'est un excellent logiciel, mais il est également détesté par beaucoup pour être un hack non standard.la source
Projet Lombok: la création de transformations personnalisées est utile.
la source