通过合并lombok-1.18.6.jar和mapstruct-processor-1.3.0.Final.jar解决eclipse下,mapstruct的interface不生成implement的问题。
问题
lombok和mapstruct都是java下非常好用的辅助类库。但是他们两个在eclipse并不能友好共存。在启用lombok的情况下,mapstrcuct的interface并不能自动生成impletemnt。
比如在build.gradle中配置1
2
3
4
5
6
7apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'net.ltgt.apt-eclipse'
dependencies {
annotationProcessor("org.mapstruct:mapstruct-processor:${mapstructVersion}")
annotationProcessor("org.projectlombok:lombok:${lombokVersion}")
}
执行gradle eclipse会自动添加Java Compiler->Annotation Processing->Facotry Path
但是这时候,你在mapstruct的interface类里按ctrl+t发现它并没有实现类。
原因
原因比较复杂,查看这个issue
https://github.com/mapstruct/mapstruct/issues/1159
解决
根据以上issue中 https://github.com/mapstruct/mapstruct/issues/1159#issuecomment-486045870 所提供的方法,用以下步骤合并两个类库可以解决这个问题
环境
- eclipse 2018-12 (4.10.0)
- lombok 1.18.6
- mapstruct 1.3.0.Final
步骤
- 解压缩
lombok-1.18.6.jar - 解压缩
mapstruct-processor-1.3.0.Final.jar - 复制
mapstruct-processor-1.3.0.Final/org目录到lombok-1.18.6目录 - 复制
mapstruct-processor-1.3.0.Final/META-INF/services/org.mapstruct.ap.internal.processor.ModelElementProcessor目录到lombok-1.18.6/META-INF/services目录 - 用文本编辑器打开
lombok-1.18.6/META-INF/services/javax.annotation.processing.Processor,在最后追加org.mapstruct.ap.MappingProcessor - 把
lombok-1.18.6目录里的内容打包成lombok-1.18.6.jar - 把
lombok-1.18.6.jar放到eclipse目录下下载
我已经做了一份,可以直接下载使用,lombok-1.18.6.jar