簡體   English   中英

具有IntelliJ和Gradle的Mapstruct AnnotationProcessor

[英]Mapstruct AnnotationProcessor with IntelliJ and Gradle

我正在嘗試使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.classMyMapperImpl.java ,因此代碼生成似乎可以正常工作。

現在,我希望當我選擇帶注釋的抽象MyMapper類並按ctrl H時 ,生成的MyMapperImpl出現在層次結構視圖中。

如果我手動將build/classes/java/main/標記為“生成的源”目錄(我確實不想這樣做,請參見上文),則該類仍不會出現在層次結構中。 但是源代碼帶有很多錯誤,因為顯然沒有找到我項目中的類。

不用說:我可以從IntelliJ和命令行中完美運行使用映射器的測試。

使用這個 ,我的團隊也在使用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運行程序,您也可以運行代碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM