Intellij和Gradle的映射注释程序



我正在尝试使映射注释处理器在gradle项目中在Intellij中工作。

理想情况下,我希望所有配置都在Gradle文件中,并且任何人都可以将项目导入Intellij并获得完整的设置而无需手动设置任何偏好。

,但我对此表示妥协。

我正在使用Intellij 2018.3和Java 11(即最新和最伟大的)。地图版本为1.2.0. -final。

我做了什么:

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

    compile "org.mapstruct:mapstruct-jdk8:${mapstruct_version}"
    annotationProcessor "org.mapstruct:mapstruct-processor:${mapstruct_version}"
    
  • 在"构建,执行,部署 ->构建工具 -> gradle-> runner"下的首选项中选择的" IDE IDE构建/运行措施"

在目录build/classes/java/main/com/myapp/mypackage/mapper/中,我看到了MyMapperImpl.classMyMapperImpl.java,因此代码生成似乎有效。

现在,我希望当我选择注释的抽象MyMapper类并按 ctrl h 时,生成的 MyMapperImpl出现在层次结构视图中。

如果我手动将build/classes/java/main/标记为"生成源"目录(我真的不想要做,请参见上文),则类仍未出现在层次结构中。但是源代码标记有很多错误,因为显然没有找到我的项目的类。

不必说:我可以完美地运行使用映射器的测试,包括来自Intellij和命令行。

使用此功能,我的团队也在使用Mapstruct,我们在我们的 build.gradle ,您还需要带上gradle的idea插件

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,您也可以使用此解决方法运行代码

最新更新