MapStructPlus 1.3.1 版本发布,更好地适配 IDEA 本地开发


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

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

  • 当删除已经转换的类时;

  • 修改配置时。

结语

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


相關推薦

2024-03-18

并强化了部分功能,使 Java 类型转换更加便捷、优雅。 MapStructPlus官网 此次迎来了一次较大版本的更新,更新日志如下: 优化复杂对象转换逻辑,占用元空间更小!性能更快! 此版本针对于复杂对象的自动转换逻辑,

2022-07-27

ing Boot 3 功能的支持,也为多个其他框架引入了更新。 新版本还具有多项值得注意的升级和改进,具体内容如下: 主要更新 远程开发改进 IntelliJ IDEA 2022.2 中为远程开发引入了大量重大升级,让体验更稳定、功能更丰富。 新

2022-07-09

es 类。 支持使用快捷键全局更改字体大小 新版本版本引入了可更改所有编辑器字体大小的键盘快捷键, 要放大字体,按 ⌃⇧. /Alt+Shift+. ;要缩小字体,按 ⌃⇧,/Alt+Shift+Comma。 支持在 JSON、YAML 和 .properties

2023-04-26

MapStructPlus 1.2.3 版本现已发布,具体更新内容如下: MapStruct 版本由 1.5.3.Final 升级为 1.5.5.Final 增加自定义 ConvertMapperAdapter 和 MapConvertMapperAdapter 类名和包名的功能,可以参考配置文档 生成的转换接口,自动接入自定义转换

2023-03-30

,ReScript 官方文档还有韩语、葡萄牙语等多国语言的翻译版本。 在加入IDEA研究院之前,张宏波因ReScript在 Meta Messenger项目的使用破例受聘,成为公司迄今唯一一位有常驻中国大陆工作经验的软件工程师。张宏波本科毕业于清

2024-01-08

并强化了部分功能,使 Java 类型转换更加便捷、优雅。 MapStructPlus官网 更新日志 兼容内部类转换 示例: @Data @AutoMapper(target = Car.InnerClass.class) public class InnerClassTarget {     private String&nbs

2023-03-28

当需要进行枚举转换时(例如枚举转换为编码值,或者又编码转换为枚举),可以在目标枚举添加 @AutoEnumMapper 注解, 增加该注解后,在任意类型中需要转换该枚举时都可以自动转换。 使用该注解需要注意:当前注解必

2023-06-30

UI 的一些有价值的增强功能。 AI Assistant (Beta) 此 EAP 版本为 IntelliJ IDEA 带来了一个重要的补充 —— AI 助手。它由 JetBrains AI 服务提供支持,并结合了 OpenAI 的功能以及 JetBrains 自己的小型模型。IntelliJ IDEA 2023.2 EAP 6 提供了一

2022-10-29

telliJ IDEA 2022.3 EAP 5 已发布!这是 Beta 之前的最后一个 EAP 版本,通过每日提示和书签提供更好的用户体验,另外还包括 Gradle 更新等优化。   改进每日提示 增强了当日提示,改进了 UI 、优化了展示的算法,可帮助用户更好

2022-12-03

简介 Restful Fast Request 是一个类似于 Postman 的 IDEA 插件。它是一个强大的 restful api 工具包插件,可以根据已有的方法帮助您快速、自动生成 url 和 params。 Restful Fast Request = API 调试工具 + API 管理工具 + API 搜索工具。 它有一个漂

2022-05-31

IntelliJ IDEA 2022.2 EAP 2 现已发布。此版本包括改进了 JSON、YAML 和 .properties 文件的使用、支持 Jakarta Persistence 3.1 中的新功能,更好地支持 Bean Validation 注释等等。开发者可以从网站、Toolbox App,或通过使用 Ubuntu 的 snaps 下载最新版

2022-07-01

IntelliJ IDEA 2022.2 的第七个 EAP 版本已上线,此版本主要对远程开发功能进行了更新。 远程开发在 2021.1.3 版本中作为 IntelliJ IDEA Ultimate 中的 beta 功能发布,远程开发功能将 IDE 拆分为本地和远程组件,IDE 本身作为后端服务安装在

2023-06-10

IntelliJ IDEA 2023.2 EAP 4 现已发布,具体更新内容包括: 用户体验 Pinned run configurations in the Run widget 为了更轻松地管理多个运行配置,实现了在 Run widget 中 pin 首选配置的选项。 在项目视图中按修改时间对文件进行排序  Int

2023-03-10

ls 添加 font 标签到白名单 优化:升级 Jboot 到 v4.0.9 最新版本 修复:压测下文章分类可能出现某些错误的问题 说的再多,不如亲自一试。 在 阿里云(腾讯云) 上一键通过 8080 端口运行 wget https://gitee.com/JPressProjec