Mapstruct注释处理器在Intellij中似乎不适用于Gradle项目

时间:2018-03-28 17:42:57

标签: java gradle intellij-idea mapstruct

我尝试使用Intellij 2017 Ultimate来构建/运行使用MapStruct的Spring Boot应用程序。这是Gradle项目。我的问题是IntelliJ似乎没有运行MapStruct注释处理器。我意识到我可以将IntelliJ配置为委托给Gradle构建过程(see this),但我希望简单地将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配置:

enter image description here

然而,当我执行./gradle clean后跟Build-> Rebuild Project时,我的out / production / classes / generated文件夹为空。

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

4 个答案:

答案 0 :(得分:6)

最后,它可以与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插件

答案 1 :(得分:3)

我的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
    似乎是与annotationProcessor配置有关的bug in IDEA

    IntelliJ IDEA -> Configure Annotations Processors (click to enlarge the screenshot)

  2. 在“ out / production / classes / generated”文件夹中签出构建输出。如果为空,请尝试重建您的项目。在重新构建之前,请手动删除构建输出文件夹的内容并修改您的mapper类,以确保应用更改。

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

  4. 尝试将构建操作委派给Gradle。我不使用此选项,因为注释处理器仍然可以为我工作。

    IntelliJ IDEA -> Delegate build/run actions to Gradle

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

答案 2 :(得分:1)

您需要使用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')
}

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

答案 3 :(得分:0)

我正在使用Tomcat EE服务器运行Spring应用程序。 对我来说,以下工作有效:

编辑配置> VM选项

中添加以下行
-Xms1024m -Xmx1024m -XX:MaxPermSize=256m
相关问题