如何将MapStruct与Eclipse正确集成? (包括Lombok Java代理)

时间:2019-04-08 16:47:40

标签: java eclipse lombok mapstruct

我愿意在某些官方项目中使用MapStruct,因此我决定先对其进行一些测试;我需要使其与eclipse集成在一起并遵循MapStruct网站上提供的所有说明,但是...到目前为止还算不上什么。 有人成功进行了这种整合吗?,如果是,我会缺少什么?

我的测试从一个更大的东西开始,但是当我意识到它不起作用时,我决定使用一个较小的示例,所以我就是这样做的:

...无法说服Eclipse自动生成映射器实现,我什至在pom中添加了jdt_apt行。

这是pom.xml的一小段-有关完整代码,请参阅mapstruct-clone项目。

<properties>
    <org.mapstruct.version>1.3.0.Final</org.mapstruct.version>
    <m2e.apt.activation>jdt_apt</m2e.apt.activation>
</properties>

预期结果将是:

  • 在下面找到我重新生成的类 保存映射时出现“目标/生成的源/注释” 界面
  • (如http://mapstruct.org/documentation/dev/reference/html/所述 ”,它将设置MapStruct注释处理器,使其运行正确 在IDE中,只要保存映射器类型。整洁,不是吗?“)
  • 但不要
  • 我只能通过“ MVN全新安装”生成类 很好,但没有那么方便

重要编辑:我也在使用lombok javaagent

2 个答案:

答案 0 :(得分:1)

我最终找到了解决问题的方法(= D)

该问题确实与Lombok Java代理和MapStruct之间的不兼容有关。 要使其正常工作,请按照Pavel在上一篇文章中的建议进行操作,它将起作用:

  

[...]只需删除lombok.jar中的SPI注册(通过删除META-INF / services / org.mapstruct.ap.spi.AstModifyingAnnotationProcessor)[...]

答案 1 :(得分:0)

我实际上面临着一个非常相似的问题,并且以略有不同的方式解决了这个问题。

  1. 如OP所述,请确保在pom.xml中声明了此属性:

    <properties> ... <m2e.apt.activation>jdt_apt</m2e.apt.activation> ... </properties>

  2. 显然,必须安装eclipse的m2e-apt插件: https://marketplace.eclipse.org/content/m2e-apt

  3. 在pom.xml中,确保提供了mapstruct-processor和lombok。

  4. 最后但并非最不重要的一点:我必须通过将org.mapstruct.ap.spi.AstModifyingAnnotationProcessor.class文件添加到jar中来调整lombok.jar(请参阅https://github.com/mapstruct/mapstruct/issues/1159#issuecomment-328974483)。

已使用Eclipse 2019-03,Lombok 1.18.6和Mapstruct 1.2.0.Final进行了测试。

希望这会有所帮助!