最近在用@Slf4j注解时,忽然失效。代码编译时遇到以下的异常:
java: cannot find symbol
symbol: variable log
根本原因: 查询代码发现是MapStruct和Lombok之间的版本冲突问题。
原pom.xml代码:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
<annotationProcessorPaths>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.4.2.Final</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
基于不同的Lombok版本,解决方案也各有不同。
- Lombok 1.18.12 版本以下: annotationProcessorPaths中mapstruct、projectlombok顺序不受影响。
- Lombok 1.18.16 版本以上: annotationProcessorPaths中mapstruct、lombok顺序受影响,mapstruct应该遵循lombok路径。
- Lombok 1.18.16 版本以上: lombok-mapstruct-binding非必须配置项。
修改后pom.xml:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
<annotationProcessorPaths>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.4.2.Final</version>
</path>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
</path>
<!--This is needed when using Lombok 1.18.16 and above-->
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-mapstruct-binding</artifactId>
<version>0.1.0</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
参考文献:
https://mapstruct.org/faq/
https://stackoverflow.com/questions/47676369/mapstruct-and-lombok-not-working-together
网友评论