Миграция с Gradle 4 на 5. Как получить mapstruct 1.20. Окончательная работа с ним - PullRequest
3 голосов
/ 16 мая 2019

Мы используем mapstruct 1.20.final около 1,5 лет с различными версиями Gradle - последняя версия Gradle 4.10.2.Мы хотим перейти на Gradle 5.4.1, который работает со всем, кроме mapstruct.Наша рабочая установка не была чистой.Поэтому решил начать все сначала.Старая рабочая установка представляла собой гибридную форму примера на Github и теперь устаревшую настройку .

. Началась снова с 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'.Невозможно указать -processorpath или --processor-path через CompileOptions.compilerArgs.Вместо этого используйте свойство 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 Ответ

3 голосов
/ 16 мая 2019

Начиная с последней версии 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"))
...