Java Lombok项目有哪些风险?

Java Lombok项目有哪些风险?,java,jakarta-ee,boilerplate,lombok,Java,Jakarta Ee,Boilerplate,Lombok,我正在为新的一年制定性能目标,我想我会很有意思地制定一个目标来减少代码库的大小,尤其是样板文件。为了解决这个问题,我想出了一个办法,就是用它使bean尽可能短。但是我有一个习惯,就是忽视新软件和方法的缺点,所以我依赖于堆栈溢出社区:有人能告诉我为什么Lombok是个坏主意吗?一个主要的缺点是IDE支持。由于Lombok实际上并不是一种语言变化,而且您的IDE只理解java,所以您需要一个支持Lombok的IDE才能正常工作。到目前为止,这是唯一一个包含Eclipse和IntelliJ的Eclip

我正在为新的一年制定性能目标,我想我会很有意思地制定一个目标来减少代码库的大小,尤其是样板文件。为了解决这个问题,我想出了一个办法,就是用它使bean尽可能短。但是我有一个习惯,就是忽视新软件和方法的缺点,所以我依赖于堆栈溢出社区:有人能告诉我为什么Lombok是个坏主意吗?

一个主要的缺点是IDE支持。由于Lombok实际上并不是一种语言变化,而且您的IDE只理解java,所以您需要一个支持Lombok的IDE才能正常工作。到目前为止,这是唯一一个包含Eclipse和IntelliJ的Eclipse。如果您使用eclipse,这可能还可以,但请记住,您也在为未来的开发人员做出决定


我建议你把你的一些代码移到一种不太正式的语言中,比如Groovy。我们已经成功地将一些业务逻辑和模型转移到groovy中,并且它工作得非常顺利。

类似Lombok的一个潜在缺点是,由于“缺少”setter/getter,源工具可能无法“识别”结果对象中赋予其“bean”特性的方面,因为这些特性只在编译类中体现

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


这两个方面都不是致命的缺点,而只是需要注意的方面。

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

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

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

lombok项目在编译阶段为类文件中的getter/setter添加字节码

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

有一些变通方法可用于执行多个编译阶段。 有关更多详细信息,请参见此


注意:我使用的是Spring提供的STS ide,它受到lombok的支持:)

这是一个第三方库,有些开发人员对此不太了解

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


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

在我看来,“Java+Lombok”中的源代码不再是Java源代码了。在C++ C++ C++语言中,我看到了类似于Borland公司在Borland C++ Builder IDE中开发的一些类似的东西,他们在C++代码中引入了“属性”,有效地引入了一种新的编程语言,而不是C++(在C++语言的标准中没有C++)。从Java语言规范的角度来看,使用“Java+Lombok”的源代码不是有效的源代码。此外,我认为注释并不是为了影响语言语义而设计的。

在我看来,Lombok项目最明显的风险是,当您决定使用Lombok时,您还决定处理代码的其他人都使用Lombok。这对于所有库来说都是正确的,但Lombok的特殊之处在于它是一个构建时依赖项,并且您的IDE需要插件来了解发生了什么。这意味着任何有理由接触你的代码的人(比如试图调试奇怪行为的人等)都需要知道如何设置它以及它是如何工作的。这可能有点令人沮丧。

只使用Eclipse是错误的:我在Netbeans开发中使用了ProjectLombok。我认为他们也支持其他IDE—事情可能会有所改进,但批评仍然存在,即在Lombok项目中使用IDE需要明确的IDE支持。您的项目不再是严格意义上的Java代码。如果有什么安慰的话,我使用Eclipse,但其他一些开发人员使用IDEA,它似乎还不支持Lombok。这个答案已经过时了。IntelliJ(通过插件)和NetBeans都支持Lombok。一个相关的问题:“使用Lombok项目安全吗?”你可以使用它来获得普通类。我完全同意“黑魔法”术语。如果您熟悉它,那么您将知道发生了什么,但是如果您是新手,那么您的代码似乎在欺骗您,这是WTF时刻的潜在来源非常好的一点。Java 8+Lombok的历史告诉我们,这可能是一个问题。目前,他们已经解决了这个问题,它可以与Java 9一起使用,但还不能与Java 10一起使用。可能的重复可能很有趣:在运行sonar/checkstyle之前,已经有文档记录了使用delombok的方法。但不管怎样,你真的想在你的POJO上有代码覆盖吗?!这不是关于POJO的报道。Sonar说smth喜欢
将此字段设置为私有,并添加getter
。非常喜欢。这尤其适用于来自不同编程背景的人,即非JVM语言,而lombok则不太为人所知。