Project Lombok有哪些风险?

我想出了新的一年的性能目标,我认为我的目标是减少代码库的大小,特别是样板,我会觉得很有趣。 我提出的解决这个问题的一个动作就是使用Project Lombok来使豆子尽可能短。 但我习惯于忽视新软件和方法的缺点,所以我依赖于Stack Overflow社区:谁能告诉我为什么龙目岛是一个坏主意?

一个主要的缺点是IDE支持。 由于Lombok实际上并不是语言更改,并且由于您的IDE只能理解java,因此您需要一个支持Lombok的IDE才能使其正常工作。 截至目前, 这只是包含Eclipse和IntelliJ的Eclipse。 如果您使用可能没问题的eclipse,但请记住,您也正在为未来的开发人员做出决定。

我建议你考虑将你的一些代码转换成一种不那么礼仪的语言,比如groovy。 我们已经成功地将我们的一些业务逻辑和模型转变为groovy,并且它的工作非常顺利。

Lombok的一个限制是它与java编译器密切相关。 由于注释处理器API仅允许在编译期间创建新文件(而不是现有文件的修改),因此lombok使用该API作为修改java编译器的入口点。 不幸的是,编译器的这些修改会大量使用非公共API。 使用lombok可能是一个好主意,但您必须意识到升级编译器可能会破坏您的代码。 概率很低但我总是觉得使用非公共API感到不舒服。

像Lombok这样的东西的一个潜在缺点是,由于setter / getters“缺失”,源工具可能无法“识别”生成的对象的方面,这些方面赋予它“bean”特性,因为这些特性仅在编译的类中显示。

另一个缺点是它是工具链中的另一个“黑魔法”。 幸运的是,它似乎是一个相当温和的部分(我没有使用它),它发生在编译时而不是运行时的事实实际上是一种祝福(恕我直言)。 但是,如果没有项目,您将无法重用或共享代码,因为它会在您的代码库中添加工件。 因此,虽然编译的类文件可能是“POJO”,但我认为您的源代码不是POJO。

这些都不是严重的缺点,而只是需要注意的方面。

在我看来,“Java + Lombok”中的源代码不再是Java源代码。 我认为这是Borland公司多年前在他们用于VCL的Borland C ++ Builder IDE中所做的类似的事情 – 他们在C ++代码中引入了“属性”,有效地引入了某种不再是C ++的新编程语言(不是C ++意义上的C ++) C ++语言标准)。 使用“Java + Lombok”的源在Java语言规范方面不是有效的源。 此外,我认为注释并非旨在影响语言语义。

这是第三方图书馆,有些开发人员对此并不了解。

IDE应该支持注释处理(有IDEA和Eclipse的插件)。

如上所述,您的代码将没有getter / setter。 它导致声纳/检查式违规。

正如用户@Jcs在另一个答案中指出的那样,我想补充更多。

在我们的项目中,我们使用了用于生成映射器类的mapstruct,在编译代码之前,使用mvn generate-sources命令,这是在使用maven处理器插件的过程阶段完成的。

project lombok在编译阶段在类文件中添加getter / setter的字节码。

由于在编译之前执行了进程阶段,因此它发现类中没有可用的getter / setter。

有一些变通方法可以执行多个编译阶段。 有关详细信息,请参阅此git中心票证 。

注意:我正在使用Spring的STS ide并且它受lombok支持:)