如何正确导入mapstruct,同时克制编译时mapstruct与lombok冲突 ...

宁睿  金牌会员 | 2024-11-12 11:10:20 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 943|帖子 943|积分 2839

本文先容编译时产生的冲突,导包时期产生的冲突请劳驾查找其他解决方法
一样平常情况下只需要按照官网的导入即可,但假如同时使用了lombok,则需要小心。具体信息可以检察官网文档:MapStruct 1.5.5.Final 集成lombok
注意:在编译测试的时候,一定先清算再编译。这样可以解决80%的报错问题

出现如下问题请清算后再编译
  1. [WARNING] 批注处理不适用于隐式编译的文件。
  2.   使用 -implicit 指定用于隐式编译的策略。
复制代码

假如配置不正确,则可能在编译的时候出现如下问题:
  1. [ERROR] /E:/my_project_move/12_milkbox2/milkbox2-api/milkbox-service/service-sys/src/main/java/top/milkbox/sys/modular/menu/enums/SysMenuTypeEnum.java:[16,9] 无法将枚举 top.milkbox.sys.modular.menu.enums.SysMenuTypeEnum中的构造器 SysMenuTypeEnum应用到给定类型;
  2.   需要: 没有参数
  3.   找到:    java.lang.String,java.lang.String
  4.   原因: 实际参数列表和形式参数列表长度不同
复制代码


导入lombok和mapstruct
  1. <dependency>
  2.     <groupId>org.projectlombok</groupId>
  3.     <artifactId>lombok</artifactId>
  4. </dependency>
  5. <dependency>
  6.     <groupId>org.mapstruct</groupId>
  7.     <artifactId>mapstruct</artifactId>
  8.     <version>${org.mapstruct.version}</version>
  9. </dependency>
复制代码
除了导入mapstruct基础的包之外还需要配置这三个path
  1. <path>
  2.     <groupId>org.mapstruct</groupId>
  3.     <artifactId>mapstruct-processor</artifactId>
  4.     <version>${org.mapstruct.version}</version>
  5. </path>
  6. <path>
  7.     <groupId>org.projectlombok</groupId>
  8.     <artifactId>lombok</artifactId>
  9.     <version>${lombok.version}</version>
  10. </path>
  11. <path>
  12.     <groupId>org.projectlombok</groupId>
  13.     <artifactId>lombok-mapstruct-binding</artifactId>
  14.     <version>0.2.0</version>
  15. </path>
复制代码
完整的配置如下
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5.     <modelVersion>4.0.0</modelVersion>
  6.     <groupId>top.milkbox</groupId>
  7.     <artifactId>milkbox-api</artifactId>
  8.     <version>1.0-DEV</version>
  9.     <packaging>pom</packaging>
  10.     <parent>
  11.         <groupId>org.springframework.boot</groupId>
  12.         <artifactId>spring-boot-starter-parent</artifactId>
  13.         <version>3.2.1</version>
  14.     </parent>
  15.     <dependencies>
  16.         
  17.         
  18.         
  19.         <dependency>
  20.             <groupId>org.projectlombok</groupId>
  21.             <artifactId>lombok</artifactId>
  22.         </dependency>
  23.         
  24.         <dependency>
  25.             <groupId>org.mapstruct</groupId>
  26.             <artifactId>mapstruct</artifactId>
  27.             <version>${org.mapstruct.version}</version>
  28.         </dependency>
  29.         
  30.     </dependencies>
  31.     <properties>
  32.         <maven.compiler.source>21</maven.compiler.source>
  33.         <maven.compiler.target>21</maven.compiler.target>
  34.         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  35.         
  36.         
  37.         <org.mapstruct.version>1.5.5.Final</org.mapstruct.version>
  38.     </properties>
  39.     <build>
  40.         <plugins>
  41.             <plugin>
  42.                 <groupId>org.apache.maven.plugins</groupId>
  43.                 <artifactId>maven-compiler-plugin</artifactId>
  44.                 <version>3.11.0</version>
  45.                 <configuration>
  46.                     <source>${maven.compiler.source}</source>
  47.                     <target>${maven.compiler.target}</target>
  48.                     <encoding>UTF-8</encoding>
  49.                     <annotationProcessorPaths>
  50.                         
  51.                         <path>
  52.                             <groupId>org.mapstruct</groupId>
  53.                             <artifactId>mapstruct-processor</artifactId>
  54.                             <version>${org.mapstruct.version}</version>
  55.                         </path>
  56.                         
  57.                         <path>
  58.                             <groupId>org.projectlombok</groupId>
  59.                             <artifactId>lombok</artifactId>
  60.                             <version>${lombok.version}</version>
  61.                         </path>
  62.                         
  63.                         
  64.                         <path>
  65.                             <groupId>org.projectlombok</groupId>
  66.                             <artifactId>lombok-mapstruct-binding</artifactId>
  67.                             <version>0.2.0</version>
  68.                         </path>
  69.                     </annotationProcessorPaths>
  70.                 </configuration>
  71.             </plugin>
  72.         </plugins>
  73.     </build>
  74. </project>
复制代码
以下为官方文档原文中英对照(豆包ai翻译)
14.2. Lombok

MapStruct works together with Project Lombok as of MapStruct 1.2.0.Beta1 and Lombok 1.16.14.
MapStruct 与 MapStruct 1.2.0.Beta1 和 Lombok 1.16.14 的 Lombok 项目一起工作。
MapStruct takes advantage of generated getters, setters, and constructors and uses them to generate the mapper implementations.
MapStruct 利用生成的 getter、setter 和构造函数,并使用它们来生成 mapper 实现。
Lombok 1.18.16 introduces a breaking change (changelog). The additional annotation processor (Maven) must be added otherwise MapStruct stops working with Lombok. This resolves the compilation issues of Lombok and MapStruct modules.lombok-mapstruct-binding
Lombok 1.18.16 引入了一个重大更改(更新日志)。必须添加额外的解释处理器 (Maven),否则 MapStruct 将克制与 Lombok 一起工作。这将解决 Lombok 和 MapStruct 模块的编译问题。lombok-mapstruct-binding
  1. <path>
  2.    <groupId>org.projectlombok</groupId>
  3.    <artifactId>lombok-mapstruct-binding</artifactId>
  4.    <version>0.2.0</version>
  5. </path>
复制代码
14.2.1. Set up 设置

The set up using Maven or Gradle does not differ from what is described in Set up. Additionally, you need to provide Lombok dependencies.
使用 Maven 或 Gradle 的设置与 设置中形貌的设置没有区别。别的,您需要提供 Lombok 依赖项。
Example 116. Maven configuration
例 116.Maven 配置
  1. <properties>
  2.    <org.mapstruct.version>1.5.5.Final</org.mapstruct.version>
  3.    <org.projectlombok.version>1.18.16</org.projectlombok.version>
  4.    <maven.compiler.source>1.8</maven.compiler.source>
  5.    <maven.compiler.target>1.8</maven.compiler.target>
  6. </properties>
  7. <dependencies>
  8.    <dependency>
  9.        <groupId>org.mapstruct</groupId>
  10.        <artifactId>mapstruct</artifactId>
  11.        <version>${org.mapstruct.version}</version>
  12.    </dependency>
  13.    
  14.    
  15.    <dependency>
  16.        <groupId>org.projectlombok</groupId>
  17.        <artifactId>lombok</artifactId>
  18.        <version>${org.projectlombok.version}</version>
  19.        <scope>provided</scope>
  20.    </dependency>
  21. </dependencies>
  22. <build>
  23.    <plugins>
  24.        <plugin>
  25.            <groupId>org.apache.maven.plugins</groupId>
  26.            <artifactId>maven-compiler-plugin</artifactId>
  27.            <version>3.8.1</version>
  28.            <configuration>
  29.                <source>1.8</source>
  30.                <target>1.8</target>
  31.                <annotationProcessorPaths>
  32.                    <path>
  33.                        <groupId>org.mapstruct</groupId>
  34.                        <artifactId>mapstruct-processor</artifactId>
  35.                        <version>${org.mapstruct.version}</version>
  36.                    </path>
  37.                    <path>
  38.                        <groupId>org.projectlombok</groupId>
  39.                        <artifactId>lombok</artifactId>
  40.                        <version>${org.projectlombok.version}</version>
  41.                    </path>
  42.                   
  43.                   
  44.                    <path>
  45.                        <groupId>org.projectlombok</groupId>
  46.                        <artifactId>lombok-mapstruct-binding</artifactId>
  47.                        <version>0.2.0</version>
  48.                    </path>
  49.                </annotationProcessorPaths>
  50.            </configuration>
  51.        </plugin>
  52.    </plugins>
  53. </build>
复制代码
Example 117. Gradle configuration (3.4 and later)
例 117.Gradle 配置(3.4 及更高版本)
  1. dependencies {
  2.    implementation "org.mapstruct:mapstruct:${mapstructVersion}"
  3.    compileOnly "org.projectlombok:lombok:1.18.16"
  4.    annotationProcessor "org.projectlombok:lombok-mapstruct-binding:0.2.0"
  5.    annotationProcessor "org.mapstruct:mapstruct-processor:${mapstructVersion}"
  6.    annotationProcessor "org.projectlombok:lombok:1.18.16"
  7. }
复制代码
The usage combines what you already know from Defining a mapper and Lombok.
该用法结合了您在定义映射器和 Lombok 中已经了解的内容。
Example 118. Usage of MapStruct with Lombok
例 118.MapStruct 在 Lombok 中的使用
  1. @Data
  2. public class Source {
  3.    private String test;
  4. }
  5. public class Target {
  6.    private Long testing;
  7.    public Long getTesting() {
  8.        return testing;
  9.    }
  10.    public void setTesting( Long testing ) {
  11.        this.testing = testing;
  12.    }
  13. }
  14. @Mapper
  15. public interface SourceTargetMapper {
  16.    SourceTargetMapper MAPPER = Mappers.getMapper( SourceTargetMapper.class );
  17.    @Mapping( source = "test", target = "testing" )
  18.    Target toTarget( Source s );
  19. }
复制代码
A working example can be found on the GitHub project mapstruct-lombok.
可以在 GitHub 项目 mapstruct-lombok 上找到一个工作示例。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

宁睿

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表