SpringBoot项目 - Maven Build Lombok 报错

Posted 在咖啡里溺水的鱼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot项目 - Maven Build Lombok 报错相关的知识,希望对你有一定的参考价值。

先抛结论

被Lombok @Builder 和 @UtilityClass 修饰的类成员变量不能通过 import static 方式引入。


今天遇到了一个很诡异的问题,一个SpringBoot项目,突然在某次提交之后Maven编译就开始报错了。报错信息通篇是找不到那些标记了@Data的类所自动生成的 Getter方法和Setter方法,还夹杂着一些莫名其妙的无法在静态类中引用静态方法(源码绝对是正常的,不存在此类引用)

翻遍了百度之后,尝试了各种方式无果,包括:

  1. 提升Maven-compiler-plugin版本
  2. 提升Lombok版本
  3. 增加Maven-compiler-plugin的annotationProcessorPaths配置
  4. 其他江湖偏方

最终无奈,找到了Google,没想到这个问题在外网也是各热门问题,不得不说StackOverflow真的是牛逼,


StackOverflow上问题的链接:
https://stackoverflow.com/questions/34358689/maven-build-cannot-find-symbol-when-accessing-project-lombok-annotated-methods
也感谢这位老哥,一下子点醒了我。然后顺藤摸瓜找到了以下内容

https://github.com/rzwitserloot/lombok/issues/2044

https://github.com/rzwitserloot/lombok/wiki/LOMBOK-CONCEPT:-Resolution
https://github.com/rzwitserloot/lombok/issues/979

第一个是我认为讲的最清楚的一个。

大概意思就是 @Builder@UtilityClass类的成员不能通过import static方法引入,举的例子是比如a.b.c.d(),无法区分出这是a.b包c类的d方法,还是a包b类c属性的d方法,说实话我个人每台理解这和不能import static有什么冲突。今天有点晚了,先记录下问题,之后再仔细思考吧。

回到问题,发现项目中的确存在 import static 了 一个@UtilityClass的一个成员,修改代码之后,问题解决,成功编译。

对于这个问题,我还是赞同github其中一个人的观点,Lombok既然官方已经知道这件事,好歹可以在相关注解的javadoc里提示一下吧。。但是官方对此一直无动于衷,真的让人有些懊恼。。

重复一遍结论:

被Lombok 的 @UtilityClass 或 @Builder 标记的类中的成员,不能通过 import static方式引入。

以上。

祝大家工作顺利

以上是关于SpringBoot项目 - Maven Build Lombok 报错的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot创建maven多模块项目

eclipse运行maven项目报错java.lang.ClassNotFoundException: xxxxxx

maven项目中不能加载java目录下的配置文件

Intellij idea编译项目报错,项目里没有配maven,搞了好几天了,求大神帮忙。

SpringBoot整合Redis

导入到idea里的springboot/maven项目不显示为maven项目