解决eclipse下mapstrcuct和lombok冲突问题

通过合并lombok-1.18.6.jarmapstruct-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
7
apply 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