首先给出pom的配置
pom文件的关键依赖如下:
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<!-- <kotlin.version>1.5.31</kotlin.version>-->
<org.mapstruct.version>1.5.3.Final</org.mapstruct.version>
<lombok-mapstruct-binding.version>0.2.0</lombok-mapstruct-binding.version>
</properties>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
<scope>provided</scope>
</dependency>
<!-- MapStruct domain 映射工具 -->
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>${org.mapstruct.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<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>
<annotationProcessorPaths>
<!-- mapstruct插件处理器 -->
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${org.mapstruct.version}</version>
</path>
<!-- Lombok 注解处理器 -->
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path>
<!-- MapStruct 和 Lombok 注解绑定处理器,应该是非必须的 -->
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-mapstruct-binding</artifactId>
<version>${lombok-mapstruct-binding.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>
注意每次修改过pom或其他的涉及代码生成的插件,都要先clean一下,避免被之前的输出影响
注意:引入时,mapstruct-processor必须lombok后面。
原因
plugin中这么写的原因:
- 当不存在annotationProcessorPaths 时,idea默认是执行classPath下的annotation Processor,也就是执行中的processor依赖(这里lombok已经有了),而mapStruct的processor却被要求放在annotationProcessorPaths下。
- 如果annotationProcessorPaths存在,则以annotationProcessorPaths下的processor为准,忽略classPath下的了,这个时候mapstruct官网的plugin下的annotationProcessorPaths中没有lombok,因此lombok的注解就失效了(因为该路径下没有lombok(也就是processor),也就无法生成代码),所以要在annotationProcessorPaths下再添加lombok