因为一个突然的Bug,技术总监无法解决就直接要求大家项目中禁用lombok!

科技   2024-12-25 11:36   陕西  
因一个Bug,Lombok被全盘禁用
这件事简直让我联想到小时候在学校,有个熊孩子不小心把玻璃打碎了,结果老师气得把全班的篮球都没收了😂。

事情是这样的

话说有一天,某公司技术总监在打包项目的时候,突然遇到了一个莫名其妙的 Bug。从截图上看,报错信息挺直白:
java.lang.IllegalAccessError: class lombok.javac.apt.LombokProcessor...
嗯?这不就是经典的 Lombok “锅”吗?看这错误栈,显然是某种依赖版本冲突,导致编译时 Lombok 的注解处理器加载失败。
按理说,这种问题稍微熟悉 Java 项目构建的同学应该能很快定位解决吧?升级 JDK 版本、调整依赖、配置 annotationProcessor,没啥特别难的。
但这位技术总监的解决方法更简单粗暴——直接禁用 Lombok


团队所有人被强制要求在项目中删掉 Lombok 的依赖,回归到手写 Getter、Setter 的“原始时代”。这波操作一出,团队的小伙伴顿时集体炸锅,纷纷表示:“这也太离谱了吧!”

Lombok,天使还是魔鬼?

Lombok 是 Java 开发圈子里非常流行的工具,主要功能是通过注解的方式简化冗余代码,比如自动生成 Getter、Setter、ToString、Equals、HashCode 等方法。用过它的同学应该都知道,这玩意最大的优点就是让代码变得简洁优雅。
举个例子,使用 Lombok 写一个简单的 Java 类:
@Data // Lombok 注解,一键生成 Getter、Setter、toString 等方法
public class User {
    private String name;
    private int age;
}
只需要短短几行代码,就搞定了所有属性方法。而不用 Lombok 的话,你得像下面这样手写:
public class User {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{name='" + name + "', age=" + age + "}";
    }
}
兄弟们,手写 Getter 和 Setter 的时代,我们不是已经告别了吗?!
然而,Lombok 也不是没有缺点。比如:
  1. 编译器依赖问题:它本质上是通过注解处理器来操作字节码,如果编译器或者 JDK 版本不兼容,就可能出现运行时错误。
  2. 可读性问题:对于刚接触项目的开发者来说,Lombok 的魔法操作可能显得不够直观,导致代码的“可读性”下降。
不过这些问题,靠一点小小的调试和配置就能解决啊,完全不至于“因噎废食”到禁用的地步。

技术总监的“禁用令”,到底冤不冤?

来看总监的做法。遇到 Bug,直接禁用工具,听起来有点像“车胎漏气了,直接把车报废了”的感觉🤣。但换个角度看,也能理解一些老程序员的心理。很多人可能觉得:
  • Lombok 是“语法糖”,虽然好用,但依赖这种工具,未来出了问题不好排查。
  • 手写代码才是最稳妥的,什么 Getter、Setter,不写出来都不安心。
这种想法虽然“保守”,但不能否认,有些大厂开发的确对 Lombok 有些抵触。比如:
  • Lombok 的注解功能是通过字节码增强实现的,在某些复杂场景下可能会导致依赖冲突或者编译问题。
  • 一些追求高稳定性的大型项目,为了避免工具带来的潜在风险,会选择放弃这种“语法糖”。
不过话又说回来,问题的本质是:技术总监连 Bug 的根因都没搞清楚,就直接选择禁用工具,属实有点懒得分析了。

那么,这个 Bug 应该怎么解决?

要解决这个问题,我们需要搞清楚几个点:
  1. JDK 版本兼容性:使用的是 javac 17.0.9。在 Java 16+ 中,某些模块化特性会对 Lombok 的注解处理器产生影响。
  2. 依赖冲突:Lombok 的版本和项目中其他依赖(比如 Spring Boot)版本是否兼容?

1. 检查 Lombok 版本

Lombok 官方早已支持 JDK 17,只要升级到最新版本即可。如果项目中使用的是旧版 Lombok,直接在 Maven 中改成最新版本:
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.28</version> <!-- 最新版本 -->
    <scope>provided</scope>
</dependency>

2. 配置注解处理器

IDEA 或者其他 IDE 中,需要确保 annotation processing 是开启的,否则 Lombok 的注解处理器无法正常工作。
在 IntelliJ IDEA 中:
  • 打开 File -> Settings -> Build, Execution, Deployment -> Compiler -> Annotation Processors
  • 勾选 Enable annotation processing

3. 避免模块化冲突

Java 9 引入模块化后,有时候会导致 Lombok 的类加载失败。这种情况下,可以尝试在启动参数中添加以下设置:
--add-opens java.base/java.lang=ALL-UNNAMED
或者使用 module-info.java 手动声明依赖关系。

4. 提高调试能力

工具是死的,人是活的。遇到问题,别急着全盘否定工具,多查查文档、试试调试配置,可能根本不需要大动干戈。
作为程序员,不要轻易被 Bug 挫败。工具本身不是问题,问题在于我们是否真的理解了工具的原理,以及出现问题时如何更好地解决。
望下次总监遇到 Bug 时,能多点耐心,不要让大家重回“手写 Getter 和 Setter”的日子了!
对编程、职场感兴趣的同学,可以链接我,微信:coder301 拉你进入“程序员交流群”。
🔥东哥私藏精品 热门推荐🔥

东哥作为一名超级老码农,整理了全网最全《Java高级架构师资料合集》

资料包含了《IDEA视频教程》《最全Java面试题库》、最全项目实战源码及视频》及《毕业设计系统源码》总量高达 650GB 。全部免费领取!全面满足各个阶段程序员的学习需求。

Java面试那些事儿
回复 java ,领取Java面试题。分享AI编程,Java教程,Java面试辅导,Java编程视频,Java下载,Java技术栈,AI工具,Java开源项目,Java简历模板,Java招聘,Java实战,Java面试经验,IDEA教程。
 最新文章