【问题标题】:Lombok causing MapStruct compileJava build failure after upgrading to Gradle 5.0Lombok 升级到 Gradle 5.0 后导致 MapStruct compileJava 构建失败
【发布时间】:2021-05-26 15:06:04
【问题描述】:

我们正在尝试从 Gradle 4.5 升级到 5.0。升级后,compileJava 失败,因为 Mapstruct 无法解析 @Mapping 注解中使用的值(getter 显然不可用)。这在 Gradle 4.5 中运行良好。

代码是这样的

@Mapper(componentModel = "spring")
public interface CAndACodeGenConverter extends BaseConverter<CGen, AGen> {

    @Mapping(target = "owner", source = "owner.name")
    @Mapping(target = "useCA", source = "defaultCA")
    AGen convertToDto(CGen entity);
}

我们的 build.gradle 是这样的

    mapstructVersion = "1.4.1.Final"
    lombokVersion = "1.18.12"
    lombokMapstructBindingVersion = "0.2.0"

    compileOnly('org.projectlombok:lombok:1.18.12')
    compile("org.mapstruct:mapstruct:${mapstructVersion}")
    implementation "org.mapstruct:mapstruct:${mapstructVersion}", "org.projectlombok:lombok:${lombokVersion}"
    annotationProcessor "org.mapstruct:mapstruct-processor:${mapstructVersion}", "org.projectlombok:lombok-mapstruct-binding:${lombokMapstructBindingVersion}"
 

我们得到的错误是

error: No property named "owner.name" exists in source parameter(s). Did you mean "null"?

这在 Gradle 4.5 中运行良好。

【问题讨论】:

    标签: java spring-boot gradle lombok mapstruct


    【解决方案1】:

    尝试改变依赖顺序如下:

    compileOnly "org.projectlombok:lombok:$lombokVersion"
    compileOnly "org.mapstruct:mapstruct:${mapstructVersion}"
    annotationProcessor "org.projectlombok:lombok-mapstruct-binding:0.2.0"
    annotationProcessor "org.mapstruct:mapstruct-processor:${mapstructVersion}"
    annotationProcessor "org.projectlombok:lombok:$lombokVersion"
    

    我刚刚测试过,它可以工作。

    附: IDK为什么需要这个命令,很久以前从lombok-mapstruct-binding相关文章中得到的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-08
      • 2022-09-23
      • 2020-12-22
      • 1970-01-01
      • 2018-01-19
      • 1970-01-01
      • 2021-07-27
      • 1970-01-01
      相关资源
      最近更新 更多