如何让 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 中同时使用 Lombok 1.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/

Gradle with Eclipse - 多个源集时不完整的.classpath

Android Studio:如何使用 Gradle 生成签名的 APK?