@Slf4j注解失效

2022-06-16  本文已影响0人  漫行者曰

最近在用@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版本,解决方案也各有不同。

  1. Lombok 1.18.12 版本以下: annotationProcessorPaths中mapstruct、projectlombok顺序不受影响。
  2. Lombok 1.18.16 版本以上: annotationProcessorPaths中mapstruct、lombok顺序受影响,mapstruct应该遵循lombok路径。
  3. 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

上一篇下一篇

猜你喜欢

热点阅读