本来在mac上这个项目编译一直没有问题,然后今天我把项目转到windows系统上编译,就报错了
D:\www\five-years\core\src\main\java\com\fiveYears\mapStruct\DiaryMapStruct.java:17:5
java: Unknown property "username" in result type com.fiveYears.pojo.result.DiaryResult. Did you mean "null"?
刚开始一直以为是MapStruct的问题,我用的版本是1.3.1.Final
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.6</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.3.1.Final</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.3.1.Final</version>
<scope>provided</scope>
</dependency>
于是我就换到最新的版本1.4.2.Final,但是还是一样报错
后来百度了下,发现也有人遇到过,说是和lombok版本不兼容,导致获取不到对象的get,set方法
我测试了下,直接实例化DiaryResult的对象,是有get,和set,那么应该就是mapstruct在编译生成代码的时候,读取不到get,set方法
也看到说要在pom中加maven插件,如下,但是我试了下还是不行
<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>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-mapstruct-binding</artifactId>
<version>0.2.0</version>
</path>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct-version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>
虽然不行,但是这个人说:
确保 Lombok 最低版本为 1.18.16
annotationProcessorPaths 中,mapstruct-processor 的配置要在 lombok 之后
于是我就将lombok也改为较新版本1.18.20,真的可以了!
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.4.2.Final</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.4.2.Final</version>
<scope>provided</scope>
</dependency>
然后我又把plugin也删除,结果也是可以的,用了mapstruct-processor,看来是可以不依赖maven-plugin的
问题完美解决,搞了1天半,真是心力憔悴,java这种依赖兼容太操蛋了
问题是原来在mac上使用老版本是好的,切换到windows就有问题,这个问题是真诡异