从Gradle 4迁移到5。如何使用mapstruct 1.20.final

时间:2019-05-16 13:53:47

标签: gradle mapstruct

我们已在各种Gradle版本中使用mapstruct 1.20.final约1.5年-最新的gradle 4.10.2。我们想切换到Gradle 5.4.1,它适用于除mapstruct之外的所有内容。我们的工作设置不干净。因此决定重新开始。旧的工作设置是Github上的example和现在的obsolete setup的混合形式。

http://mapstruct.org/news/2013-07-08-using-mapstruct-with-gradle为基础再次开始。有强烈的感觉,这与Gradle 5不兼容。发行说明Gradle 5指出:Gradle将不再自动应用编译类路径上的注释处理器-改用CompileOptions.annotationProcessorPath。尝试按照https://blog.gradle.org/incremental-compiler-avoidance#about-annotation-processors中的说明进行操作。这适用于4.10.2。使用Gradle 5会导致以下错误: 任务':eu.educator.rest:compileJava'的执行失败。 无法通过CompileOptions.compilerArgs指定-processorpath或--processor-path。请改用CompileOptions.annotationProcessorPath属性。

我们有一个多项目设置。在项目“ rest”中,经过清理的build.gradle如下所示:

plugins {
    id 'net.ltgt.apt' version '0.21'
}

configurations {
        apt
}

dependencies {
    apt libraries.mapstruct_processor
    compileOnly libraries.mapstruct_processor
}

compileJava {
    options.annotationProcessorPath = configurations.apt
}

在过去1.5天内尝试了多种设置。无法正常工作。因此,如果任何人都可以使用Mapstruct与Gradle 5一起工作,我真的很感激能正常工作的build.gradle,提示和指针。

PS。如何用符合Gradle 5的版本替换以下内容。

tasks.withType(JavaCompile) {
    options.compilerArgs = [
            '-Amapstruct.suppressGeneratorTimestamp=true'
    ]
}

1 个答案:

答案 0 :(得分:1)

自从最新的Gradle版本(> = 4.8)以来,您可以按以下方式简化构建脚本;您不再需要apt插件,只需使用annotationProcessor Gradle配置:

ext{
    mapstructVersion = "1.2.0.Final"
}
dependencies{
    // ...
    // --- Mapstruct ---------------------------------
    compileOnly("org.mapstruct:mapstruct-jdk8:${mapstructVersion}")
    annotationProcessor "org.mapstruct:mapstruct-processor:${mapstructVersion}"
}
compileJava {
    options.annotationProcessorPath = configurations.annotationProcessor

    // if you need to configure mapstruct component model
    options.compilerArgs << "-Amapstruct.defaultComponentModel=spring" 
}

注意:默认情况下,Gradle将生成源到目录:build/generated/sources/annotationProcessor/java/main

但这是可配置的,例如:

compileJava { 
   // ...
   options.setAnnotationProcessorGeneratedSourcesDirectory( file("$projectDir/src/generated/java"))