Mapstruct Annotation Processor 似乎无法在 Intellij 中使用 Gradle 项目

Mapstruct Annotation Processor does not seem to work in Intellij with Gradle project

我正在尝试使用 Intellij 2017 Ultimate build/run Spring 使用 MapStruct 的启动应用程序。这是一个 Gradle 项目。我的问题是 IntelliJ 似乎没有 运行 MapStruct Annotation Processor。我意识到我可以配置 IntelliJ 委托给 Gradle 构建过程(),但我希望简单地配置 IntelliJ 以使用 APT 来生成必要的 类 本身。

我已经为我的项目启用了APT,但是我的类仍然没有生成。

build.gradle(适用片段):

ext {
    mapstructVersion = '1.2.0.Final'
}

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

dependencies {
    // MapStruct support
    implementation group: 'org.mapstruct', name: 'mapstruct-jdk8', version: mapstructVersion
    annotationProcessor group: 'org.mapstruct', name: 'mapstruct-processor', version: mapstructVersion
 }

IntelliJ 配置:

然而,当我执行 ./gradle clean 然后执行构建 -> 重建项目时,我的 out/production/classes/generated 文件夹是空的。

我还需要做些什么才能在这个项目上启用 APT 吗? IntelliJ 是否应该自动检测类路径中的 mapstruct 注释处理器?

您需要改用net.ltgt.apt-idea插件,它会自动配置IntelliJ IDEA。

plugins {
    id 'net.ltgt.apt-idea' version '0.17'
}    
dependencies {
    compile('org.mapstruct:mapstruct-jdk8:1.2.0.Final')
    apt('org.mapstruct:mapstruct-processor:1.2.0.Final')
}

请注意 apt 在最新的 gradle 版本中已被弃用,应该使用 annotationProcessor 代替。但是,IntelliJ 仍然不支持它。参见 IDEA-187868

终于在 Intellji 2018.1 CE 上正常运行了。我们不需要任何 apt 插件。

此处更新了gradle文件

plugins {
    id 'java'
}

repositories {
       mavenCentral()
       mavenLocal()
}
sourceCompatibility = JavaVersion.VERSION_1_8


dependencies {
      compile group: 'org.mapstruct', name: 'mapstruct-jdk8', version: '1.2.0.Final'
      compileOnly 'org.mapstruct:mapstruct-processor:1.2.0.Final'
      annotationProcessor 'org.mapstruct:mapstruct-processor:1.2.0.Final'
      compileOnly ("org.projectlombok:lombok")
      testCompile 'junit:junit:4.12'
}

请确保以下内容配置正确

  1. 启用注释处理器(首选项->构建执行部署->编译器->注释处理器)

  2. MapStruct 插件

  3. Lombok 插件

我的build.gradle:

plugins {
    id 'java'
    id 'idea'
}

ext {
    mapstructVersion = '1.2.0.Final'
}

dependencies {

    // bean mapping
    compile group: 'org.mapstruct', name: 'mapstruct-jdk8', version: mapstructVersion
    compileOnly group: 'org.mapstruct', name: 'mapstruct-processor', version: mapstructVersion
    annotationProcessor group: 'org.mapstruct', name: 'mapstruct-processor', version: mapstructVersion

}

刷新并尝试重建您的项目。如果它对您来说运行不顺畅,请继续执行下面的故障排除部分。

疑难解答

如果它不适合你...

  1. 手动启用 Annotation Processors
    好像是 bug in IDEA 相关的 annotationProcessor 配置。

  2. 检查“out/production/classes/generated”文件夹中的构建输出。如果它是空的,请尝试重建您的项目。通过在重建之前手动删除构建输出文件夹的内容并修改映射器 class 来确保应用更改。

     $ rm -rf out build .gradle
    
  3. 通过在 IntelliJ IDEA 之外构建和运行项目来验证您的Gradle构建文件。

  4. 尝试将构建操作委托给 Gradle。我不使用这个选项,因为注解处理器对我有用。

  5. 更新至 IntelliJ IDEA 2018.3 或更高版本。

我是 运行 一个使用 Tomcat EE 服务器的 Spring 应用程序。 对我来说,做以下工作:

编辑配置 > VM 选项中添加以下行

-Xms1024m -Xmx1024m -XX:MaxPermSize=256m

如果您使用的是 kotlin,我们将无法再在类路径中发现注解处理器。您必须将如下所示的依赖项放入 build.gradle.kts

kapt {
    dependencies {
        kapt("org.mapstruct:mapstruct-processor:1.4.2.Final")
    }
}