今晚上更新了两个版本,1.3.0和1.3.1,主要为了解决 IDEA 部分编译时,出现的各种莫名奇妙的问题。
更新日志
-
新增编译参数的配置方式,解决 IDEA 部分编译导致的一系列问题;
-
更好地适配本地IDEA开发;
-
AutoMapper
增加imports
支持
问题描述
一段时间以来,有好几位朋友反馈过 MapStructPlus 在使用时,修改了类,启动会报错,但重新执行 mvn clean compile
又恢复了正常。
就是这么一个莫名其妙的问题,最近终于想到了原因!
原因
首先,该问题出现的前提是在项目中添加了 MapStructPlus 的配置类,之后在日常的开发中,修改了需要转换的 Bean 对象时,而 IDEA 的编译方式,是只编译修改过的类,所以,刚刚修改过的类,重新编译时,并没有加载到原先的配置类,所以没有按照预期来生成转换类,最终引发了各种各样奇怪的问题出现,而重新执行 mvn clean compile
会把错误编译生成的转换类删掉,重新编译整个项目,故又能恢复。
解决方案
提供了两种解决方案:
-
将所有配置项,都通过编译参数传递给编译器;
-
通过编译参数,指定配置类名。
这样子,无论是部分编译,还是全量编译,都能保证配置相同。
示例
这里拿第二种方式举例,假设在 maven 环境中,原来配置如下:
@MapperConfig(adapterClassName = "DemoConvertMapperAdapter",
adapterPackage = "io.github.linpeilie.adapter",
mapAdapterClassName = "DemoMapConvertMapperAdapter")
public class MapStructPlusConfiguration {
}
使用新版本后,可以在编译参数中,指定MapStructPlus的配置类名称,如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>${maven.compiler.source}</source>
<target>${maven.compiler.target}</target>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path>
<path>
<groupId>io.github.linpeilie</groupId>
<artifactId>mapstruct-plus-processor</artifactId>
<version>${mapstruct-plus.version}</version>
</path>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-mapstruct-binding</artifactId>
<version>0.2.0</version>
</path>
</annotationProcessorPaths>
<compilerArgs>
<arg>-Amapstruct.plus.mapperConfigClass=com.tutelary.MapStructPlusConfiguration</arg>
</compilerArgs>
</configuration>
</plugin>
其他具体的配置项,可以参考 MapStructPlus - 指南
与 IDEA 适配仍存在的问题
在以下场景,需要重新执行 mvn clean compile
:
-
当添加新的需要转换的类,并且该类与其他类有嵌套关系时,部分编译不能生成两者的自动转换;
-
当删除已经转换的类时;
-
修改配置时。
结语
官网打不开,是因为域名在备案,不是跑路了,可以访问国内站点镜像