uui*_*ode 134 java annotations lombok
我今天遇到了lombok.
我非常想知道它是如何工作的.
Java Geek文章提供了一些线索,但对我来说并不是很清楚:
Java 6删除了apt并使javac能够管理注释,简化流程以获得更简单的单步计算.这是龙目岛采取的路径.
也许使用Java 6编译过程将是:javac - > apt - > lombok apt process - >读取类文件并使用ASM添加set/get方法?
你能告诉我关于机制的更多细节吗?
rzw*_*oot 124
正如肖恩·帕特里克·弗洛伊德所说,龙目岛确实对内部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
axt*_*avt 68
它使用Java 6中提供的JSR 269 Pluggable Annotation Processing API.
请注意,lombok.jar
其中包含名为的文件/META-INF/services/javax.annotation.processing.Processor
.当javac
在编译类路径中看到这个文件,它运行编译时的定义有注释处理器.
Sea*_*oyd 46
在对axtavt的答案的补充中:龙目岛使用的内容比JSR 269 api暴露的要多得多.Lombok代码针对a)内部javac apis和b)内部eclipse apis(在单独的处理器中).JSR 269不允许您修改现有的源代码,但是当您Element
转换为基础AST节点时,您实际上可以修改AST(这是Lombok所做的项目).
所以Lombok是一个巨大的黑客攻击,只能在Sun VM上运行编译(afaik).这是一个很棒的软件,但是很多人也因为这样的非标准黑客而讨厌它.
归档时间: |
|
查看次数: |
34980 次 |
最近记录: |