同时使用lombok和mapstruct报“No property named “xxx“ exists in source parameter(s).”

我在某项目同时引入了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>
        <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>

你可能感兴趣的:(软件配置,mapstruct,lombok)