【问题标题】:Mapstruct doesn't generate BeanMapperImpl.java when used with Intellij and Gradle与 Intellij 和 Gradle 一起使用时,Mapstruct 不会生成 BeanMapperImpl.java
【发布时间】:2018-09-11 10:27:28
【问题描述】:

之前我在 Eclipse 中使用了 Mapstruct,它工作正常(Gradle 与命令“eclipse”一起使用以生成 Eclipse 项目文件,并且构建由 Eclipse 本身完成)。迁移到 Intellij 后,Mapstruct 不再生成 BeanMapperImpl.java。我的 build.gradle 如下:

plugins {
    id 'net.ltgt.apt' version '0.9'
}

...

allprojects {
    apply plugin: 'eclipse'
    apply plugin: 'java'
    apply plugin: 'idea'
    apply plugin: 'net.ltgt.apt'
    ...
}

subprojects {
    dependencies {
        compile 'org.mapstruct:mapstruct-jdk8:1.2.0.Final'
        apt 'org.mapstruct:mapstruct-processor:1.2.0.Final
        ...
    }
}

Intellij 的构建被委托给 Gradle。

【问题讨论】:

  • 之前也使用过 Gradle 吗?如果 IntelliJ 将构建委托给 IntelliJ,则意味着您的 Gradle 设置有问题。
  • @Filip 在使用 Gradle 之前使用命令“eclipse”生成 Eclipse 项目文件,并且构建是由 Eclipse 自己完成的。
  • 但是您是否使用了一些仅运行 gradle 构建的 CI?在我看来,它与gradle有关。你试过增加apt插件的版本吗?
  • @Filip 你是说像 Jenkins 这样的工具吗?不,我没有使用类似的东西。我也将net.ltgt.apt升级到0.15,结果还是一样。

标签: gradle intellij-idea mapstruct


【解决方案1】:

根据您的 IntelliJ 版本,您可以直接转储 net.ltgt.apt 插件并使 mapstruct-processor 成为 compileOnly 依赖项。

使用旧版本的 IntelliJ,结果可能会有所不同。

在 gradle 中,java 文件可能会在 .class 文件旁边生成。虽然不干净,但您可以在包装过程中将它们过滤掉,如下所示:

jar {
    exclude('**/*.java')
}

也可以更改目标文件夹...

【讨论】:

  • 你能举个例子吗?我只是删除插件并将依赖项更改为: compile 'org.mapstruct:mapstruct-jdk8:1.2.0.Final' compile 'org.mapstruct:mapstruct-processor:1.2.0.Final' 但在 . apt_generated 目录。
  • 不同的插件使用不同的文件夹结构。 IntelliJ 和 gradle 可能使用不同的文件夹结构。这些文件的去向没有合同。我认为对我来说,生成的 mapstruct java 文件只需使用 gradle 进入 build/classes 文件夹,但使用 intelliJ 进入 out/production/classes/generated 文件夹。 .class 文件也进入类。
猜你喜欢
  • 1970-01-01
  • 2019-02-03
  • 2017-09-21
  • 1970-01-01
  • 2019-05-17
  • 2018-04-13
  • 1970-01-01
  • 2017-08-31
  • 2019-05-27
相关资源
最近更新 更多