MapStructPlus1.3.1发布,良久的问题终于被解决!
发表于:2023-06-16 | 分类: Java
字数统计: 723 | 阅读时长: 2分钟 | 阅读量:

今晚上更新了两个版本,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

  • 当添加新的需要转换的类,并且该类与其他类有嵌套关系时,部分编译不能生成两者的自动转换
  • 当删除已经转换的类时
  • 修改配置时

这些问题在 1.3.2 都已解决,强烈建议升级

结语

官网打不开,是因为域名在备案,不是跑路了,可以访问国内站点镜像

上一篇:
MapStructPlus1.3.3发布,全面适配 IDEA,使用更加丝滑流畅!
下一篇:
EasyRelation v1.1.1 发布,增加自动关联数据特性