0.背景
使用mapstruct时出现:
Unknown property "xxx" in result type xxx. Did you mean "null"?
同时,项目中也用到了lombok。
mapstruct版本: 1.4.1.Final
lombok版本: 1.8.22 (继承的Spring2.5.6)
<!-- mapstruct START-->
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>${mapstruct.version}</version>
<!--这个scope 只能作用在编译和测试时,同时没有传递性。-->
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
<scope>provided</scope>
</dependency>
<!-- mapstruct END -->
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
1.解决
1.1 方案1:调整顺序
代码生成器annotationProcessor
标签部分,将lombok放在mapstruct之前。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
<!--自动生成代码annotationProcessor-->
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>
1.2 方案2:官网叽叽歪歪一堆
官网说Lombok 1.18.16或更高版本要添加lombok-mapstruct-binding的依赖,但是经过方案1我的问题它就解决了。
原文在这里:https://mapstruct.org/faq/
其实文中也提到了先在模块1使用lombok再在模块2使用mapstruct。
留个备用:
<!-- mapStruct-lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-mapstruct-binding</artifactId>
<version>0.2.0</version>
<scope>provided</scope>
</dependency>