具有IntelliJ和Gradle的Mapstruct AnnotationProcessor

时间:2018-12-17 13:15:48

标签: java intellij-idea annotation-processing mapstruct

我正在尝试让Mapstruct注释处理器在Gradle项目的IntelliJ中工作。

理想情况下,我希望所有配置都在gradle文件中,并且任何人都可以将项目导入IntelliJ并获得完整的设置,而不必手动设置任何首选项。

但我对此可以妥协。

我正在将IntelliJ 2018.3和Gradle 5.0与Java 11一起使用(即最新和最出色的)。 Mapstruct版本是1.2.0.FINAL。

我做了什么:

  • 在我的build.gradle中配置了Mapstruct注释处理器:

    compile "org.mapstruct:mapstruct-jdk8:${mapstruct_version}"
    annotationProcessor "org.mapstruct:mapstruct-processor:${mapstruct_version}"
    
  • 在“构建,执行,部署->构建工具-> Gradle-> Runner”下的“首选项”中选择了“将IDE生成/运行操作委托给Gradle”

在目录build/classes/java/main/com/myapp/mypackage/mapper/中,我看到一个MyMapperImpl.class和一个MyMapperImpl.java,因此代码生成似乎可以正常工作。

现在,我希望当我选择带注释的摘要MyMapper类并按 ctrl H 时,生成的MyMapperImpl会出现在层次结构视图。

如果我手动将build/classes/java/main/标记为“生成的源”目录(我确实不想这样做,请参见上文),则该类仍不会出现在层次结构中。但是,由于显然没有找到我项目中的类,因此源代码带有很多错误。

不用说:我可以从IntelliJ和命令行中完美地运行使用映射器的测试。

1 个答案:

答案 0 :(得分:0)

使用this,我的团队也在使用mapstruct,我们将其用于 build.gradle ,您还需要将idea插件用于gradle

def generatedSources = "$buildDir/generated"
def generatedOutputDir = file("$generatedSources")

/*
 create generated .java files in different folder than classes
 In IntelliJ 2016.3.x: Enable Annotation Processing, then set generated sources,
 relative to module output dir, at path '../../generated'
 */
compileJava {
    doFirst {
        generatedOutputDir.exists() || generatedOutputDir.mkdirs()
        options.compilerArgs = [
                '-s', "${generatedSources}"
        ]
    }
}


idea {
    module {
        downloadSources = true
        // tell intellij where to find generated sources
        sourceDirs += generatedOutputDir
    }
}

通过这种解决方法,即使没有Gradle runner,您也可以运行代码