Saltar al contenido

MapStruct y Lombok no funcionan juntos

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *