Java 24项目中如何为Maven指定ASM和Lombok版本?编译及依赖解析问题求助
Java 24项目中如何为Maven指定ASM和Lombok版本?编译及依赖解析问题求助
兄弟,我太懂你碰到这个Java 24 + Maven + Lombok/ASM的坑有多闹心了!我之前在新版本JDK上也踩过类似的依赖兼容烂摊子,给你捋几个实打实的解决步骤,应该能帮你把问题摆平:
先把你手动塞进项目的jar包全删掉!Maven的核心就是统一管控依赖,手动加jar会彻底打乱它的依赖树逻辑,你现在碰到的“package lombok does not...”找不到的问题,十有八九是手动jar和Maven自动管理的依赖冲突搞出来的,先把这个源头掐掉。
强制锁定兼容Java 24的ASM版本:Java 24对字节码做了不少更新,旧版ASM根本不认识这些新东西,这也是你一开始碰到那个
[JAVAC][com.sun.tools.javac.code.TypeTag :: UNKNOWN] [24]编译错误的核心原因。你需要在pom.xml的dependencyManagement块里把ASM相关的版本都锁死,比如用支持Java 24的9.6版本:
<dependencyManagement> <dependencies> <dependency> <groupId>org.ow2.asm</groupId> <artifactId>asm</artifactId> <version>9.6</version> </dependency> <dependency> <groupId>org.ow2.asm</groupId> <artifactId>asm-commons</artifactId> <version>9.6</version> </dependency> <!-- 要是用到其他ASM子模块,比如asm-tree,也一起在这里锁定版本 --> </dependencies> </dependencyManagement>
- 把Lombok升级到支持Java 24的版本:目前Lombok 1.18.30及以上的版本已经适配了Java 24,而且一定要在Maven编译插件里把Lombok配置成注解处理器,不然还是会出问题。给你个完整的配置参考:
<dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.30</version> <scope>provided</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.12.1</version> <!-- 这个版本完美支持Java 24 --> <configuration> <source>24</source> <target>24</target> <annotationProcessorPaths> <path> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.30</version> </path> </annotationProcessorPaths> </configuration> </plugin> </plugins> </build>
- 最后清缓存重新构建:执行
mvn clean install -U,这个命令会把Maven本地缓存的旧依赖全清掉,强制拉取新的兼容版本,避免残留的旧依赖搞事情。
另外多说一句,你最开始的那个编译错误,本质就是字节码处理工具跟不上Java 24的新特性,只要把ASM和Lombok都升级到兼容版本,那个UNKNOWN错误也会跟着消失的!
备注:内容来源于stack exchange,提问作者Juan Felipe Pérez




