首页  >  文章  >  Java  >  如何解决 MapStruct 与 Lombok 一起使用时的'未知属性”错误?

如何解决 MapStruct 与 Lombok 一起使用时的'未知属性”错误?

Patricia Arquette
Patricia Arquette原创
2024-11-23 16:28:18464浏览

How to Resolve MapStruct's

MapStruct 和 Lombok 兼容性问题:结果类型中的未知属性

问题陈述:

同时使用 MapStruct 和 Lombok 时,会出现错误,指出“未知结果类型中的“属性”。当 MapStruct 由于 Lombok 注释删除了 getter 和 setter 而无法在目标 DTO 类中找到属性时,就会出现此问题。

原因:

Maven 正在使用 MapStruct 处理器,但不是 Lombok 处理器。 Maven 配置中的annotationProcessorPaths 指定应使用哪些处理器。

解决方案:

选项 1:将 Lombok 依赖添加到 AnnotationProcessorPaths

修改 Maven 编译器插件配置以包含 Lombok 和MapStruct 注释处理器:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.6.1</version>
    <configuration>
        <source>${java.version}</source>
        <target>${java.version}</target>
        <annotationProcessorPaths>
            <path>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${org.projectlombok.version}</version>
            </path>
            <path>
                <groupId>org.mapstruct</groupId>
                <artifactId>mapstruct-processor</artifactId>
                <version>${org.mapstruct.version}</version>
            </path>
        </annotationProcessorPaths>
    </configuration>
</plugin>

对于 Lombok 版本 1.18.16 及更高版本,还添加 lombok-mapstruct-binding 依赖项:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok-mapstruct-binding</artifactId>
    <version>0.2.0</version>
</dependency>

选项 2:添加 MapStruct 处理器作为依赖

添加mapstruct-processor依赖项并删除annotationProcessorPaths:

<dependencies>
    <dependency>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct-processor</artifactId>
        <version>${org.mapstruct.version}</version>
    </dependency>

附加说明:

为了确保IntelliJ中的注释处理,请将mapstruct-processor添加为提供的依赖项已知问题 (IDEA-150621)。

以上是如何解决 MapStruct 与 Lombok 一起使用时的'未知属性”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn