Lombok 在升级到 Gradle 5.0 后导致 MapStruct compileJava 构建失败
Lombok causing MapStruct compileJava build failure after upgrading to Gradle 5.0
我们正在尝试从 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"
我刚刚测试过它,它可以工作。
P.S。 IDK为什么需要这个顺序,很久以前从lombok-mapstruct-binding相关文章中得到它
我们正在尝试从 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"
我刚刚测试过它,它可以工作。
P.S。 IDK为什么需要这个顺序,很久以前从lombok-mapstruct-binding相关文章中得到它