我们已在各种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'
]
}
答案 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"))