Este codelab está planeado para agrega las configuraciones necesaris para poder utilizar las anotaciones del proyecto Lombok en nuestra aplicación.

Se agregan las versiones a utilizar como properties en el pom.xml

<properties>
    <!-- ... -->
    <lombok.version>1.18.20</lombok.version>
    <!-- Plugin versions -->
    <!-- ... -->
    <!-- jhipster-needle-maven-property -->
    <delombok-maven-plugin.version>1.18.20.0</delombok-maven-plugin.version>
</properties>

La dependencia de Lombok se agrega dentro del tag dependencies:

<dependencies>
    <!-- ... -->
    <!-- jhipster-needle-maven-add-dependency -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>${lombok.version}</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

El plugin de Lombok se agrega dentro del tag plugins:

<plugins>
    <!-- ... -->
    <!-- jhipster-needle-maven-add-plugin -->
    <plugin>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok-maven-plugin</artifactId>
    </plugin>
</plugins>

Dentro del tag pluginManagement, se debe buscar el plugin maven-compiler-plugin. Dentro de este, se debe agregar el annotationProcessor como un path como una configuiración.

<!-- ... -->
<maven-compiler-plugin>
    <!-- ... -->
    <configuration>
        <!-- ... -->
        <annotationProcessorPaths>
            <!-- ... -->
            <path>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
            </path>
            <!-- En caso de tener mapstruts, projectlombok debe ir antes -->
            <path>
                <groupId>org.mapstruct</groupId>
                <artifactId>mapstruct-processor</artifactId>
                <version>${mapstruct.version}</version>
            </path>
        </annotationProcessorPaths>
    </configuration>
    <!-- ... -->
</maven-compiler-plugin>

Aunque ya se agregó el plugin de Lombok, es necesario agregar su configuración. Esta se agrega como parte de los plugins administrados.

Dentro del tag build se debe buscar el tag pluginManagement y dentro de este tag, se tiene que agregar un nuevo tag de tipo plugin que define la configuración de Lombok.

<!-- ... -->
<build>
<!-- ... -->
    <pluginManagement>
        <plugins>
            <!-- ... -->
            <!-- jhipster-needle-maven-add-plugin-management -->
            <plugin>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok-maven-plugin</artifactId>
                <version>${delombok-maven-plugin.version}</version>
                <executions>
                    <execution>
                        <id>delombok</id>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>delombok</goal>
                        </goals>
                        <configuration>
                            <sourceDirectory>${project.basedir}/src/main/java</sourceDirectory>
                            <outputDirectory>${project.build.directory}/delombok</outputDirectory>
                            <addOutputDirectory>false</addOutputDirectory>
                            <formatPreferences>
                                <javaLangAsFQN>skip</javaLangAsFQN>
                            </formatPreferences>
                            <verbose>false</verbose>
                        </configuration>
                    </execution>
                    <!-- This is for delomboking also your tests sources. <execution> <id>test-delombok</id> <phase>generate-test-sources</phase> <goals> <goal>testDelombok</goal> </goals>
                        <configuration> <verbose>false</verbose> </configuration> </execution> -->
                </executions>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

Para probar el funcionamiento de la configuración, se puede crear una clase de ejemplo como la siguiente:

package mx.conacyt.crip.ejemplos.domain;

import lombok.Data;

@Data
public class Persona {

    private String id;
    private String nombre;
    private String apellidoPaterno;
    private String apellidoMaterno;
    private int edad;

    // Este tipo de método también lo puede generar Lombok
    public Persona nombre(String nombre) {
        // El método setNombre fue generado por Lombok
        setNombre(nombre);
        return this;
    }

}

Una vez generado el ejemplo, basta con compilar el proyecto:

./mvnw clean package

Para que VScode no marque como error el uso de métodos que Lombok va a generar al vuelo, se requiere instalar la extensión GabrielBB.vscode-lombok.