
ruoyi框架mapstruct和lombok 引入,及之间的冲突
mapstruct依赖lombok生成的setter 、getter方法,所以编译的需要有个先后顺序,就是上面的annotationProcessorPaths 中 lombok一定要在前面。3、所以在需要的子module里面可以直接引入mapstruct(为了可以所有模块里面都可以使用,可以再ruoyi-common里面引入)因为ruoyi的根pom的dependencyManagement里面
·
一、lombok的支持
因为ruoyi的根pom的dependencyManagement里面有下面的import
<!-- SpringBoot的依赖配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.5.15</version>
<type>pom</type>
<scope>import</scope>
</dependency>
上面的这个引入里面有lombok的导入了,版本是1.8.26,所以我们也导入1.8.26
在根pom里面增加
1、properties中加
<lombok.version>1.18.26</lombok.version>
2、dependencyManagement中增加
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
3、所以在需要的子module里面可以直接引入lombok(为了可以所有模块里面都可以使用,可以再ruoyi-common里面引入)
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
二、mapstruct的支持
在根pom里面增加
1、properties中加
<mapstruct.version>1.4.3.Final</mapstruct.version>
2、dependencyManagement中增加
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>${mapstruct.version}</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
<scope>provided</scope>
</dependency>
3、所以在需要的子module里面可以直接引入mapstruct(为了可以所有模块里面都可以使用,可以再ruoyi-common里面引入)
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
</dependency>
三、让编译时生成需要的代码
1、调整了编译插件的版本号
3.1 变为 3.8.1
2、增加了注解处理器
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.26</version>
</path>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
</path>
</annotationProcessorPaths>
四、lombok与mapstruct冲突问题
mapstruct依赖lombok生成的setter 、getter方法,所以编译的需要有个先后顺序,就是上面的annotationProcessorPaths 中 lombok一定要在前面
五、mapstruct 生成实现类时与 @build 注解冲突的问题(会导致mapstruct的@AfterMapping 注解的方法不被调用)
原因: 由于Lombok的@Builder注解影响, 在MapStruct编译时, 会用BeanBuilder.build()完成目标对象的实例化
解决: 在转化的方法上加注解(参考:https://github.com/mapstruct/mapstruct/issues/1556)
@BeanMapping(builder = @Builder(disableBuilder = true))
更多推荐
所有评论(0)