如何让 Eclipse 使用 Gradle 生成 MapStruct 映射器
Posted
技术标签:
【中文标题】如何让 Eclipse 使用 Gradle 生成 MapStruct 映射器【英文标题】:How to get Eclipse to generate MapStruct Mappers using Gradle 【发布时间】:2018-01-13 01:30:29 【问题描述】:是否有任何特殊的配置可以让 eclipse 生成 Mapstruct 映射器?目前它们没有被生成。
它们确实在 gradle 构建中生成,但我无法让它们生成,因此我可以在开发中使用它们。
我将此添加到我的 build.gradle:
plugins
id "net.ltgt.apt" version "0.10"
dependencies
compile "org.mapstruct:mapstruct-jdk8:$mapstructVersion"
apt "org.mapstruct:mapstruct-processor:$mapstructVersion"
我还为 MapStruct 添加了 eclipse 插件(虽然我相信这实际上不是必需的???)
然后我去了项目 > 属性 > Java 编译器 > 注释处理:
但是 .apt_generated 是空的,我错过了什么?
我正在使用:
Eclipse:版本:Oxygen Release (4.7.0) Build id:20170620-1800
MapStruct 版本 1.2.0.CR1(也尝试 1.1.0.FINAL)
【问题讨论】:
【参考方案1】:所以经过一番搜索后,我确定解决方案是您必须在 gradle 中手动运行 eclipse
任务。如果成功,您应该会看到类似以下内容:
解决方案来自阅读 https://github.com/tbroyer/gradle-apt-plugin 文档,其中指出:
使用 Buildship 时,您必须手动运行 eclipseJdtApt 和 eclipseFactorypath 任务以生成 Eclipse 配置文件,然后运行 eclipseJdt 任务或手动启用注释处理:在项目属性 → Java 编译器 → 注释处理中,检查启用注释处理。请注意,虽然所有这些任务都依赖于 eclipse 任务,但该任务与 Buildship 不兼容,因此您必须显式运行上述两个或三个任务而不运行 eclipse 任务。
它指出 eclipse
任务与 buildship 不兼容,但这似乎已修复(我运行了 eclipse
任务并且没有问题):
不过,我确实遇到了与 Buildship 不兼容的 cleanEclipse
任务问题。
毕竟*MapperImpl.java
类是在<project_root>/.apt_generated
中生成的
【讨论】:
很高兴您设法找到解决问题的方法。我还为我们的网站创建了一个issue,因此我们可以将您的答案整合到网站的IDE Support 部分。 如果您也使用 Lombok,您可能会在没有桨的情况下上岸。 @Justin 目前在 Eclipse 中同时使用 Lombok1.16.18
和 Mapstruct 1.2.0.Final
似乎存在问题(AFAIK 它适用于其他 IDE,当然也适用于 Gradle)参见 github.com/mapstruct/mapstruct/issues/1159 和github.com/rzwitserloot/lombok/issues/1359 将org.mapstruct.ap.spi.AstModifyingAnnotationProcessor.class
文件添加到lombok.jar
的解决方法对我有用,希望它会尽快修复。
@Neilos 幸运的是,我正在使用 Gradle,所以这基本上是我的解决方法。我尝试将该类添加到 JAR,但 IIRC 要么 JAR 中的包结构不同,要么我只是对我应该做的事情感到困惑。我正在使用最新的 Eclipse Oxygen,它还没有固定在那里。我分享你的希望! :-D
@Justin 这里是修改后的 JAR,在 eclipse 中安装 lombok 后,将 lombok.jar 替换为 1drv.ms/u/s!AucAWW_UyaMUhVOvKLNC5twrDVDh以上是关于如何让 Eclipse 使用 Gradle 生成 MapStruct 映射器的主要内容,如果未能解决你的问题,请参考以下文章
如何使用Gradle为Android项目生成Eclipse和Intellij项目文件
如何让 gradle/Eclipse/play 框架协同工作?
如何将 gradle 生成的源文件夹添加到 Eclipse 项目?
停止 Eclipse/Gradle 生成 .project 和 .settings/