先拋結論
被Lombok @Builder 和 @UtilityClass 修飾的類成員變量不能通過 import static 方式引入。
今天遇到了一個很詭異的問題,一個SpringBoot項目,突然在某次提交之後Maven編譯就開始報錯了。報錯信息通篇是找不到那些標記了@Data的類所自動生成的 Getter方法和Setter方法,還夾雜着一些莫名其妙的無法在靜態類中引用靜態方法(源碼絕對是正常的,不存在此類引用)
翻遍了百度之後,嘗試了各種方式無果,包括:
- 提升Maven-compiler-plugin版本
- 提升Lombok版本
- 增加Maven-compiler-plugin的annotationProcessorPaths配置
- 其他江湖偏方
最終無奈,找到了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方式引入。
以上。
祝大家工作順利