我正在尝试让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和命令行中完美地运行使用映射器的测试。
答案 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
,您也可以运行代码