Solución:
La razón por la que no funciona es porque Maven solo usa el procesador MapStruct y no el de Lombok. los annotationProcessorPaths
le dice a Maven qué procesadores debe usar.
El delombok no hace nada ya que terminas con 2 archivos por clase y creo que el compilador maven no los ve.
Tienes 2 opciones:
Opción 1: agregue la dependencia de lombok en el annotationProcessorPaths
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${org.projectlombok.version}</version>
</path>
<!-- This is needed when using Lombok 1.18.16 and above -->
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-mapstruct-binding</artifactId>
<version>0.2.0</version>
</path>
<!-- Mapstruct should follow the lombok path(s) -->
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${org.mapstruct.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
Opcion 2:
Añade el mapstruct-processor
dependencia a sus dependencias y elimine la annotationProcessorPaths
. De esta manera, el compilador maven recogerá todos los procesadores de anotaciones que se encuentran en sus dependencias.
Aconsejaría utilizar la Opción 1, ya que con eso puede estar seguro de que no está utilizando MapStruct
dependencias transitivas y clases internas en su código.
Editar:
Para asegurarse de que el procesamiento de anotaciones IntelliJ también funcione, tendrá que agregar el mapstruct-processor
como un provided
dependencia debida a IDEA-150621. IntelliJ en el momento no usa el annotationProcessorPaths
de Maven para configurar el proyecto correctamente.
Edición 2:
Agrega información y comenta sobre lombok-mapstruct-binding
necesario desde Lombok 1.18.16.
En caso de que alguien esté buscando cómo configurarlo usando Gradle:
dependencies {
// Lombok
compileOnly 'org.projectlombok:lombok:1.18.2'
annotationProcessor 'org.projectlombok:lombok:1.18.2'
// MapStruct
compileOnly 'org.mapstruct:mapstruct-jdk8:1.2.0.Final'
annotationProcessor 'org.mapstruct:mapstruct-processor:1.2.0.Final'
}
Tuve problemas similares. ¡Resultó que mi versión de MapStruct estaba desactualizada!
Usé MapStruct versión 1.1.0.Final, pero para el soporte de Lombok al menos 1.2.0.Final es necesario.