MapStruct复制失败,属性为null,与lombok有关系

只要我不努力,老板就永远也过不上他想要的生活

前言

今天我搭建项目的时候发现,使用MapStruct复制对象失败了,复制后所有的对象属性都为null。我一再检查,确信自己依赖没有引入错误,也没有什么特殊的配置,就是很简单的一个对象复制。
然后我就在网上查,网上找,都不尽如意。我之前搭的一个demo就一下子成功了,没有丝毫问题。于是我就把那个demo与这个项目比对一下,到底有什么区别,是什么导致那个demo能成功,这个项目就失败呢?

与Lombok有关系

终于让我发现了问题所在,大家可能觉得是不是lombok版本的问题?出乎我的意料,它不是版本问题,而是依赖引入的顺序问题。这怎么可能呢?我来来回回做了两遍实验,确认了这个事实。
将lombok的依赖放在它的上面就解决了这个问题

问题复现

首先我们复现一下问题,看以下代码是个很简单的对象拷贝,但是它的结果却是null
MapStruct复制失败,属性为null,与lombok有关系_第1张图片
这是怎么回事呢?我们知道MapStruct会生成一个实现类,我们就看看这个实现类里的代码是怎么样的?
MapStruct复制失败,属性为null,与lombok有关系_第2张图片
这就很奇怪了,怎么没有set get方法,lombok失效了吗?这个代码妥妥的都是null啊。于是我就跟之前的一个demo对比。尤其是pom文件,终于让我发现了华点。
MapStruct复制失败,属性为null,与lombok有关系_第3张图片
我发现,lombok的顺序不一样,成功的demo在MapStruct上边,失败的本项目在MapStruct下边。当我想到这个的时候,我的第一反应是怎么可能呢?当然,有人可能会问为什么不是lombok版本的问题呢?关于版本问题我已经试过了,依然是失败的。
于是,我就没报什么希望,随便试一试,把lombok往前放,从最下面放在了最上面
MapStruct复制失败,属性为null,与lombok有关系_第4张图片
然后再运行开头的那个方法,它竟然成功了。这就很神奇了。这个依赖的引入顺序怎么会影响它的编译呢?
希望遇到这个问题的同学,注意一下,很小的问题,但是很奇葩。

你可能感兴趣的:(其他,springboot实践,java,mapstruct)