我遇到了 lombok.extern 库中的 @Slf4j 注释的意外问题。看来更新我的操作系统或 Homebrew 后,@Slf4j 注释已停止工作。
即使使用通过 Spring Initializer 创建的全新存储库,我也可以重现这个奇怪的问题。当我添加@Slf4j注释时,IDE能够识别所需的库。此外,项目在 IDE 中成功构建并运行,如屏幕截图所示。
但是当我通过命令行构建时,它失败并出现错误。
mvn --version
Apache Maven 3.9.9 (8e8579a9e76f7d015ee5ec7bfcdc97d260186937)
Maven home: /opt/homebrew/Cellar/maven/3.9.9/libexec
Java version: 23, vendor: Homebrew, runtime:
/opt/homebrew/Cellar/openjdk/23/libexec/openjdk.jdk/Contents/Home
Default locale: en_AU, platform encoding: UTF-8
OS name: "mac os x", version: "14.6.1", arch: "aarch64", family: "mac"
pom data:
spring-boot-starter-parent: 3.3.4
java.version: 23
maven.compiler.source: 23
maven.compiler.target: 23
dependency:
spring-boot-starter
lombok
我的所有其他项目都受到此问题的影响,并且它们使用相同组件的许多不同版本。对于问题的根本原因,我已经没有想法了。
我怀疑新版本Maven的更新可能是导致该问题的原因。但是,我无法选择恢复到旧版本
根据要求,提供pom:
<?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.3.4</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>
<maven.compiler.source>23</maven.compiler.source>
<maven.compiler.target>23</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<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>
</plugins>
</build>
</project>
更新1:我怀疑Maven在注释处理方面存在问题。 IntelliJ 做得很好。
更新2:看起来Lombok还不能与Java 23一起使用。例如:https://github.com/projectlombok/lombok/issues/3722
我通过全面切换到 Java 版本 21 解决了这个问题。这就是我所做的: