java - Lombok 升级到 Gradle 5.0 后导致 MapStruct compileJava 构建失败
问题描述
我们正在尝试从 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"
我刚刚测试过它并且它有效。
PS IDK 为什么需要这个命令,很久以前从lombok-mapstruct-binding 相关文章中得到的
推荐阅读
- python - 没有这样的元素:无法定位元素错误(硒和python)
- php - 为什么 laravel 8 上的 ckeditor5 提交 null 而不是 value?
- r - R忽略转义序列
- ios - 如何从 osx 在 Ipad 的 ios 环境中测试 React 应用程序?
- c - 我可以关闭信号处理程序中的文件描述符吗?
- go - 如何将数据从一种类型复制到具有相同结构的另一种类型?
- matlab - Matlab print() 和 saveas() 覆盖位置输入数据
- javascript - 基于单选按钮的Js计算,以及一些问题
- apache-spark - 为什么我无法连接到 Hive Metastore?
- azure-devops - 如何使用 Linux microsoft 托管代理在 Windows 机器中存储 Azure 管道工件?