1 背景
- 直接使用Spring脚手架构建web应用,原始pom.xml的写法如下:
<?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.7</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.forrest</groupId><artifactId>learn-java</artifactId><version>0.0.1-SNAPSHOT</version><packaging>pom</packaging><name>learn-java</name><description>learn-java</description><url/><licenses><license/></licenses><developers><developer/></developers><modules><module>learn-logger</module></modules><scm><connection/><developerConnection/><tag/><url/></scm><properties><java.version>17</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</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.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><annotationProcessorPaths><path><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></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></exclude></excludes></configuration></plugin></plugins></build></project>
- 使用了@Log4j2,编译时报错:
/*** @author: Forrest* @since: 2024/12/28*/
@Log4j2
@RequestMapping("logging")
@RestController
public class LoggingController {@GetMapping("log")public void log() {log.debug("debug");log.info("info");log.warn("warn");log.error("error");}
}
java17 @Log4j2 编译时找不到符号 log
2 解决办法
- 参考:Building with Lombok’s @Slf4j and Intellij: Cannot find symbol log
- 像装Lombok插件、"Enable annotation processing"设置为开启等操作,大家都是做好了的。为啥还找不到符号log呢?
- 有大佬说,要在pom.xml里这么写:
<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>${你用的lombok版本}</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></exclude></excludes></configuration></plugin></plugins></build>
- Spring脚手架创建的项目,pom.xml是这么写的:
- 按理来说,不写版本也没毛病啊,因为父pom文件定义了lombok的版本。
- 但不写就是不行,因此死马当活马医吧,加上版本试试看:
- 然后,奇迹发生了,问题被解决了…
2.1 总结
必须这么写:
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><annotationProcessorPaths><path><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><!-- 不知道为啥,这里必须要指定lombok的版本;否则lombok注解会失效--><version>${lombok.version}</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></exclude></excludes></configuration></plugin></plugins></build>