java - 如何正确地将 MapStruct 与 Eclipse 集成?(包括 Lombok java 代理)
问题描述
我愿意在一些官方项目中使用 MapStruct,所以我决定先对其进行一些测试;我需要使其与 eclipse 集成并遵循 MapStruct 网站上提供的所有说明,但是......到目前为止还没有运气。有没有人成功实现了这种整合?如果是的话,我会错过什么?
我的测试从更大的东西开始,但是当我意识到它不起作用时,我决定使用一个更小的例子,所以我这样做了:
- 使用 openjdk-10.0.1_windows-x64
- 下载并安装了新版本的 eclipse (eclipse-jee-2019-03-R-win32-x86_64)
- 按照http://mapstruct.org/documentation/ide-support/中的建议安装了最新的 m2e-apt(和 mapstruct 插件,尽管本练习不需要)
- 下载https://github.com/mapstruct/mapstruct-examples
- 从 git 导入(从 eclipse 中)mapstruct-clone 项目(看起来是基本的例子)
- 按照http://mapstruct.org/documentation/dev/reference/html/(第 2.1 章)中的建议检查了设置 ,一切看起来都不错
...无法说服 eclipse 自动生成映射器实现,我什至在 pom.xml 中添加了 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 clean install”生成的类,这很好但不是那么方便
重要编辑:我也在使用 lombok javaagent
解决方案
我最终找到了问题的解决方案( =D )
- 首先感谢 MapStruct 团队的 Sjaak Derksen 对我的支持
- 其次感谢 Pavel Horal 发布此解决方案 https://github.com/mapstruct/mapstruct/issues/1159
- 最后感谢我自己如此固执(有时它会有所帮助)
该问题确实与 Lombok java 代理和 MapStruct 之间的不兼容有关。要让它工作,只需按照 Pavel 在他上一篇文章中的建议进行操作,它就会起作用:
[...] 只需删除 lombok.jar 中的 SPI 注册(通过删除 META-INF/services/org.mapstruct.ap.spi.AstModifyingAnnotationProcessor)[...]
推荐阅读
- r - 如何在“R Session Aborted”运行编译代码时找到 Fortran 错误消息?
- netflix-conductor - 为什么 netflix 指挥不提供异步运行任务/子工作流的方法?
- java - MaterialDatePicker,选择结束日期后应用程序崩溃
- php - 如何使用变量内容作为其他变量名的一部分?
- .net-core - IIS 上映射驱动器的 NetworkCredential 不起作用
- node.js - 电子锻造,制作命令:覆盖默认值
- python - 给定两个列表列表查找特定匹配项 - 最快的解决方案
- node.js - React Native 和 IBM Watson
- python - 无法绘制函数
- python - 选择未显示在 django 的选择框中