同时使用lombok和mapstruct报“No property named "xxx" exists in source parameter(s). Type "ZZZ" has no properties.”错误
原因:lombok和mapstruct都是在编译期通过注解处理器生成对应代码的,如果mapstruct的注解处理器比lombok的更早被执行,则POJO的成员变量的getter和setter方法都还没有被生成,此时就会报某某属性不存在的错误。
- 解决方法一:
pom.xml中明确优先级,lombok放上面,则优先处理,如下:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.18</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.5.3.Final</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.5.3.Final</version>
<scope>provided</scope>
</dependency>
- 解决方法二:
将lombok和mapstruct-processor在maven-compiler-plugin的annotationProcessorPaths(注解处理器路径)中按上下顺序进行声明,这样lombok就会比mapstruct-processor更优先处理了,如下:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${maven.compiler.source}</source>
<target>${maven.compiler.target}</target>
<annotationProcessorPaths>
<!-- 代码简化 -->
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.18</version>
</path>
<!-- 转换器 -->
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.5.3.Final</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>