我在某项目同时引入了lombok和mapstruct。当某个类同时使用lombok和mapstruct时,会出现No property named “xxx” exists in source parameter(s)错误。后面在网上找到了这篇《同时使用lombok和mapstruct报“No property named “xxx” exists in source parameter(s).”》,完美解释了错误原因:
lombok和mapstruct都是在编译期通过注解处理器生成对应代码的,如果mapstruct的注解处理器比lombok的更早被执行,则POJO的成员变量的getter和setter方法都还没有被生成,此时就会报某某属性不存在的错误。
简而言之,就是mapstruct要比lombok更早执行,否则使用mapstruct时会找不到用lombok修饰的类的属性。
我按此文的第二种方法解决了:将lombok和mapstruct-processor在maven-compiler-plugin的annotationProcessorPaths(注解处理器路径)中按上下顺序进行声明,这样lombok就会比mapstruct-processor更优先处理了,如下:
<build>
<plugins>