java - Lombok 在升级到 Gradle 5.0 后导致 MapStruct compileJava 构建失败

标签 java spring-boot gradle lombok mapstruct

我们正在尝试从 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 中运行良好。

最佳答案

尝试像下面这样改变依赖顺序:

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相关文章中得到它

关于java - Lombok 在升级到 Gradle 5.0 后导致 MapStruct compileJava 构建失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66348462/

相关文章:

spring-boot - 用 vaadin hilla 代替 flow 有什么好处

android - Gradle Wrapper在多个项目中一次又一次下载gradle行为

java - 当类扩展抽象类时如何实现构建器模式

java - Spring 数据jdbc。无法为枚举添加自定义转换器

java - XML 模式验证时超时和挂起线程

android - 在 Android Studio 中升级 gradle 的正确方法是什么?

java - Gradle生成的Jar不包含gwt.xml文件?

java - Docker不会在指定的卷中创建文件

java - 如何将 Spring 应用程序 WAR 转换为独立的 JAR?

java - 如何在我的 Controller Spring Boot 中获取输入表单中的值