idea2023.3遇到了Lombok失效问题,注释optional和annotationProcessorPaths即可恢复正常
idea2023.3遇到了Lombok失效问题,但是另一个小版本的就没有
自己摸索了下,发现和下面这个链接提出的基本一样:
SpringBoot 3 中Lombok注解失效的几种解决方法
主要就是一个optional
标签问题,另一个是annotationProcessorPaths
问题
虽然问了chatGPT,optional是为了防止子项目也导入lombok依赖,即使用了
<optional>true</optional>
,那么当前模块依赖 Lombok,但下游依赖(其他项目引用你这个 jar)时,不会自动传递 Lombok。
而
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><annotationProcessorPaths><path><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></path></annotationProcessorPaths></configuration>
</plugin>
作用:显式告诉 Maven 编译插件,在 编译期 使用哪些 注解处理器。
比如 Lombok 的注解处理器会在编译时扫描 @Data、@Getter 等注解,然后生成对应的 getXxx/setXxx、toString 等方法写进 .class 文件。
如果没有 annotationProcessorPaths:
在现代 Maven(3.6+)和 Spring Boot 2.2+ 里,其实会自动发现 Lombok 的注解处理器,所以不写也行。
在老版本 Maven 或 IDE 配置不当时,可能就不生效,需要显式加上。
至于版本号,由于当前项目的parent是spring-boot-starter-parent,他的parent是spring-boot-dependencies
已经有了对Lombok的版本管理,其实不加也行
我这里使用的idea是2023,当然不算老,maven使用idea默认带的仓库,没有自己配置,不知道是否有影响。
但是不管怎么样,看起来上面两个配置都不会导致lombok失效,但是事实却是注释掉两个后,就可以正常使用lombok了。就很离谱
使用clean不断清理target目录,来辅助测试注释不同内容的效果
使用clean来清理删除target
至于
<plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration>
</plugin>
作用:在 打包成可执行 JAR 的时候,把 Lombok 排除掉,不放进最终的 fat jar。
原因就是 Lombok 只在编译时有用,已经生成的target里面就已经有了Lombok生成后的东西了,运行时不需要Lombok;如果不排除,它会跟着进 jar,增加包体积。
也可以去打包好的jar包里面,找到对应的bean类【而是在 BOOT-INF/classes/ 对应的包路径下】,即Employee类,发现确实是已经生成好了get/setter方法等,说明lombok生效了
可以试用缓存失效的方式【✳】
如果lombok还是不行,或者出现了其他的maven依赖问题,如果你确定当前的maven依赖导入没错,但是就是不生效,那么可以用如下方法
全部勾上并点击失效重启。