ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Java面试与工程实践:编译报错与Lombok兼容问题解析

Java面试与工程实践:编译报错与Lombok兼容问题解析 先说个我观察到的现象很多人准备Java面试题把八股文背得滚瓜烂熟但遇到一次OOM、一条编译警告或者一个排序需求还是会卡壳。背题和写代码之间缺的不是记忆力而是“把问题放到真实工程链路里看”的能力。这一期是Java面试与工程实践问题集的第二篇延续第一篇的整理思路从最近在读者提问和线上排障中挑出一批高频问题按报错现场、运行时异常、集合函数式、并发异步、工程选型和手撕算法六个方向拆开讲。不管是准备跳槽的候选人还是已经在维护生产系统的开发这份问题集都可以当做一个自查清单来用。整理的原则只有一个不堆术语把每个问题讲到能落地代码拿去就能改到自己项目里。1. 编译期那些报错从Maven发版配置到Lombok兼容1.1 警告“源发行版 17 需要目标发行版 17”的几种触发姿势这句警告字面意思很直观javac按source 17的规则去解析源码但要求生成的class文件也要是17的target两者没能对齐。最常见的触发场景不是代码问题而是构建配置和IDE设置打架。先说Maven工程。很多老项目pom里只写了maven.compiler.source或者只在properties里写了个java.version却没有同步设置target。Maven编译插件在没显式拿到target的时候会拿当前JRE的默认版本去填于是source写了17、target还是8编译器就甩出这句警告。还有更隐蔽的本地IDEA的Build工具里给模块单独设了字节码版本和pom不一致同样会在重构或者热编译的瞬间冒出来。我的建议是新工程直接统一用release而不是source/target。release不仅同时约束source和target还顺带把JDK API的访问级别也锁到对应版本避免在JDK 17下写代码却误用了JDK 21才有的API。配置如下properties maven.compiler.release17/maven.compiler.release /properties或者显式配置编译器插件plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-compiler-plugin/artifactId version3.13.0/version configuration release17/release /configuration /plugin注意一点maven-compiler-plugin 3.10之前的版本对release的支持不完整升级插件版本时顺手把IDEA的Settings - Build, Execution, Deployment - Compiler - Java Compiler里Per-module bytecode version清空两边就都干净了。1.2 Lombok报错编译器版本与注解处理器的兼容边界“you arent using a compiler supported by lombok, so lombok will not work”这条报错我见到最多的地方是团队里有人升级JDK
返回列表