解决 Lombok 在 Java 21 及以上版本中报错 symbol not found

 

随着 Java 的不断更新,开发者在升级到 Java 21 或更高版本时,可能会遇到 Lombok 的兼容性问题。一个常见的错误是:

java: symbol not found

这个错误的原因是项目中使用的 Lombok 版本过旧,无法兼容 Java 21 及以上版本引入的变化。Lombok 依赖于注解处理,而旧版本可能无法满足 Java 21+ 更严格的要求。

解决方案

解决此问题的最简单方法是更新 Lombok 依赖项,以支持 Java 21。按照以下步骤操作:

1. 在构建工具配置中更新 Lombok

  • 确保你的 pom.xml(用于 Maven)或 build.gradle(用于 Gradle)中指定了最新的 Lombok 版本。

2. 启用注解处理

  • 在你的 IDE(如 IntelliJ IDEA 或 Eclipse)中,确保启用了注解处理。

Maven 配置

在你的 pom.xml 中,将 Lombok 依赖项更新到最新版本:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>3.4.1</version>
  <relativePath/> <!-- lookup parent from repository -->
 </parent>
 <groupId>com.example</groupId>
 <artifactId>demo</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <name>demo</name>
 <description>Demo project for Spring Boot</description>
 <url/>
 <licenses>
  <license/>
 </licenses>
 <developers>
  <developer/>
 </developers>
 <scm>
  <connection/>
  <developerConnection/>
  <tag/>
  <url/>
 </scm>
 <properties>
  <java.version>23</java.version>
 </properties>
 <dependencies>
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter</artifactId>
  </dependency>
  <!-- 使用与 Java 版本兼容的最新 Lombok 版本 -->
  <dependency>
   <groupId>org.projectlombok</groupId>
   <artifactId>lombok</artifactId>
   <version>1.18.36</version> 
   <scope>provided</scope>   <!-- 添加此行 -->
  </dependency>
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-test</artifactId>
   <scope>test</scope>
  </dependency>
 </dependencies>

 <build>
  <plugins>
   <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
     <annotationProcessorPaths>
      <path>
       <groupId>org.projectlombok</groupId>
       <artifactId>lombok</artifactId>
       <version>1.18.36</version>     <!-- 添加此行 -->
      </path>
     </annotationProcessorPaths>
    </configuration>
   </plugin>
   <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
     <excludes>
      <exclude>
       <groupId>org.projectlombok</groupId>
       <artifactId>lombok</artifactId>
       <version>1.18.36</version>      <!-- 添加此行 -->
      </exclude>
     </excludes>
    </configuration>
   </plugin>
  </plugins>
 </build>
</project>

Gradle 配置

在你的 build.gradle 中,添加或更新 Lombok 依赖项:

dependencies {
    compileOnly 'org.projectlombok:lombok:1.18.30' // 使用最新的兼容版本
    annotationProcessor 'org.projectlombok:lombok:1.18.30'
}

其他提示

  • • 更新依赖项后,运行 mvn clean install(用于 Maven)或 gradle clean build(用于 Gradle)以重新构建项目。
  • • 确保你的 IDE 已安装并正确配置了 Lombok 插件:
    • • IntelliJ IDEA:转到 File → Settings → Build, Execution, Deployment → Compiler → Annotation Processors,并启用 annotation processing
    • • Eclipse/STS:确保 lombok.jar 文件已添加到 eclipse.ini 中的 -javaagent 参数中。

结论

通过更新 Lombok 依赖项并正确配置 IDE,你可以轻松解决“symbol not found”错误,并继续在 Java 21 及以上版本中使用 Lombok。始终确保使用最新的 Lombok 版本,以保持与现代 Java 功能和增强的兼容性。

 

请登录后发表评论

    没有回复内容