MapStruct genera código en tiempo de compilación y no debería requerir dependencias de tiempo de ejecución :
¿En qué se diferencia MapStruct de otras herramientas de mapeo de beans?
A diferencia de la mayoría de las otras herramientas de mapeo de beans, MapStruct no funciona en tiempo de ejecución, pero es un generador de código en tiempo de compilación.
La generación de código de mapeo en el momento de la compilación tiene muchas ventajas:
- Excelente rendimiento, ya que no se necesita reflexión ni generación de código de bytes en tiempo de ejecución; el código generado contiene invocaciones de métodos simples, como si el mapeador estuviera escrito a mano
- Sin dependencias de tiempo de ejecución, lo que convierte a MapStruct en una excelente solución para aplicaciones de Android
¿Qué alcance de dependencia se debe usar en un proyecto de Maven? ¿Debería incluirse MapStruct como una dependencia proporcionada ?
<dependencies> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct</artifactId> <version>${org.mapstruct.version}</version> <scope>provided</scope> </dependency> </dependencies>La dependencia org.mapstruct:mapstruct contiene las anotaciones necesarias para indicarle al org.mapstruct:mapstruct-processor qué hacer.
También contiene la fábrica Mappers que se usa cuando se usa el modelo de componente predeterminado. Por lo tanto, el alcance de org.mapstruct:mapstruct depende del modelo de componente que esté utilizando:
Si está utilizando este modelo de componentes, necesita org.mapstruct:mapstruct durante el tiempo de ejecución si está utilizando Mappers o si tiene dependencias entre diferentes mapeadores.
En teoría, puede usar el modelo de componentes predeterminado e instanciar sus propios mapeadores. Sin embargo, las dependencias entre los mapeadores seguirán usando Mappers , a menos que ya haya creado una instancia de su mapeador en MyMapper.INSTANCE de alguna manera, entonces MapStruct usará MyMapper.INSTANCE para obtener la instancia de MyMapper . Esto significaría que aún puede usar el mismo alcance que los otros modelos de componentes (consulte a continuación para obtener más información)
En este caso, no necesita org.mapstruct:mapstruct durante el tiempo de ejecución y puede usar <optional>true</optional> con <scope>provided</scope> .
Con Gradle, esto sería una dependencia compileOnly .
Nota: tenga cuidado al usar Spring Boot y <scope>provided</scope> el complemento maven de Spring Boot aún incluirá la dependencia org.mapstruct:mapstruct en el contenedor final proporcionado. Deberá ignorarlo configurando el complemento Spring Boot Maven.