问题

我今天遇到了lombok
我非常想知道它是如何工作的。
A Java Geek Article给出了一些线索,但对我来说并不是很清楚:

Java 6删除了apt并使javac能够管理注释,简化流程以获得更简单的单步计算。这是龙目岛采取的路径。

也许用Java 6编译过程将是:javac - > apt - > lombok apt process - >读取类文件并使用ASM添加set / get方法?

你能告诉我关于机制的更多细节吗?


#1 热门回答(107 赞)

正如肖恩·帕特里克·弗洛伊德所说,龙目岛确实对内部API进行了编码。但是,由于lombok仅在编译阶段进行了处理,因此它对使用Lombok的误导只能在sun VM上运行。它只会在ecj或sun的javac上编译。但是,绝大多数虚拟机,如果它们都装有编译器,就是其中之一。例如,Apple VM附带了sun sun javac,因此lombok在mac上运行得很好。例如,对于大豆饼干VM也是如此。

虽然对于javac我们确实必须坚持他们的更新,部分是因为他们的编译器正在进行大量的正在进行的工作,我们不得不在许多版本的eclipse中对我们的eclipse支持进行一次微调。因此,虽然我们对内部API进行编码,但它们是相对稳定的位。

如果lombok可以在不使用内部API的情况下完成,我们已经做了其他事情,但是无法完成,所以我们求助于内部API使用。

NB:我是lombok的主要开发者之一,所以,我可能有点偏颇:P


#2 热门回答(57 赞)

它使用JSR 269 Pluggable Annotation Processing API在Java 6中可用。

请注意,lombok.jar包含名为/META-INF/services/javax.annotation.processing.Processor的文件。当javac在编译类路径中查看此文件时,它会在编译期间运行在那里定义的注释处理器。


#3 热门回答(41 赞)

Project Lombok: Creating Custom Transformations是有帮助的。


原文链接