【问题标题】:How to properly integrate MapStruct with Eclipse? (Including Lombok java agent)如何正确地将 MapStruct 与 Eclipse 集成? (包括 Lombok java 代理)
【发布时间】:2019-08-29 21:07:05
【问题描述】:

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

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

...没有办法说服eclipse自动生成mapper实现,我什至在pom中添加了jdt_apt行。

这里是 pom.xml 的 sn-p - 请参考他的 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 clean install”生成的类 这很好,但不是那么方便

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

【问题讨论】:

  • 其他使用“eclipse-jee-2018-12-R-win32-x86_64”的测试也失败了
  • 其他带有“java-se-8u40-ri”的测试(同时具有 mapstruct-jdk8mapstruct 依赖项)也失败了
  • 更新:我查看了 eclipse 中的日志,这就是我的 java.lang.NoClassDefFoundError: org/mapstruct/ap/spi/AstModifyingAnnotationProcessor
  • 另一个提示,我也在使用 lombok eclipse java 代理,这看起来本身就是一个问题 (github.com/mapstruct/mapstruct/issues/1159)

标签: java eclipse lombok mapstruct


【解决方案1】:

我实际上遇到了一个非常相似的问题,并以稍微不同的方式解决了它。

  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 测试。

希望这会有所帮助!

【讨论】:

  • 克里斯,如果它可以工作就可以了,反正我通常不会觉得从 jar 中删除类文件更舒服。
【解决方案2】:

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

这个问题确实与 Lombok java 代理和 MapStruct 之间的不兼容有关。 要让它发挥作用,只需按照 Pavel 在他上一篇文章中的建议进行操作即可:

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

【讨论】:

  • 嗯......它似乎不适用于 lombok 1.18.12。我尝试从包中删除该类,但错误仍然存​​在。另外,如果我只使用 1.16.12,我不需要在 al 删除该类
猜你喜欢
  • 1970-01-01
  • 2021-12-28
  • 2017-02-13
  • 2017-10-18
  • 1970-01-01
  • 2011-02-06
  • 2012-01-21
  • 2020-07-14
  • 2015-04-06
相关资源
最近更新 更多