← Notas de desarrollo

Corregir Lombok en IntelliJ: separar compilación Gradle y soporte del IDE

En esta página

Si parecen faltar métodos Lombok, ejecuta primero ./gradlew clean test para saber si también falla la compilación. El soporte del IDE reconoce los miembros generados en el editor; el procesador de Gradle los genera al compilar. Ninguno sustituye al otro.

Este ejemplo continúa el proyecto Initializr y el ejemplo HTTP. Usa Boot 4.1.2, Gradle 9.8.2 y JDK 17; el BOM seleccionó Lombok 1.18.48. Registra una combinación funcional sin garantizar todas las parejas JDK/Lombok.

Flujo de procesamiento

Compilar Lombok antes de corregir el IDE

Comprueba constructores y getters generados por separado en main y test. Corrige el reconocimiento del IDE después de pasar las pruebas Wrapper.

Configurar la compilación Gradle

Añade este bloque al build.gradle existente, evitando declaraciones duplicadas si ya existen.

dependencies {
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    testCompileOnly 'org.projectlombok:lombok'
    testAnnotationProcessor 'org.projectlombok:lombok'
}

La configuración oficial Gradle separa dependencias de compilación y procesadores main y test. Las dos declaraciones de pruebas solo son necesarias si las fuentes de prueba usan anotaciones Lombok. Las pruebas siguientes también ejercitan esa ruta.

Las declaraciones sin versión funcionan porque el proyecto aplica el plugin Boot y io.spring.dependency-management, que importa el BOM de Boot. En un proyecto Gradle normal, usa la misma versión explícita compatible en las declaraciones necesarias o configura aparte la gestión de dependencias para esas configuraciones.

Usar el constructor y getter generados

Añade Greeting, sustituye el controlador por esta versión, conserva las pruebas HTTP y añade la clase de pruebas específica de Lombok.

src/main/java/example/demo/Greeting.java

package example.demo;

import lombok.Getter;
import lombok.RequiredArgsConstructor;

@Getter
@RequiredArgsConstructor
public class Greeting {
    private final String message;
}

src/main/java/example/demo/GreetingController.java

package example.demo;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class GreetingController {
    @GetMapping("/greeting")
    public Greeting greeting() {
        return new Greeting("Hello, Gradle");
    }
}

src/test/java/example/demo/LombokGenerationTest.java

package example.demo;

import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.*;

class LombokGenerationTest {
    @Getter
    @RequiredArgsConstructor
    static class Expected {
        private final String message;
    }

    @Test
    void mainSourceConstructorAndGetterAreGenerated() {
        assertEquals("Hello, Gradle", new Greeting("Hello, Gradle").getMessage());
    }

    @Test
    void testSourceConstructorAndGetterAreGenerated() {
        assertEquals("test fixture", new Expected("test fixture").getMessage());
    }
}
./gradlew clean test bootJar
./gradlew dependencyInsight --configuration annotationProcessor --dependency lombok

Hay ahora cinco pruebas: una de contexto, dos HTTP y dos de generación Lombok. Llaman a constructores y getters generados en fuentes principales y de prueba. /greeting debe seguir devolviendo el mismo JSON, comprobando también la serialización mediante el getter generado.

Como Lombok es compileOnly, el JAR ejecutable no lo incluye como biblioteca de ejecución. Instalar solo un plugin IDE no hace pasar Gradle. No se necesita añadir Lombok como dependencia de ejecución implementation para usar el getter ya compilado en esta configuración.

Cuando solo el IDE muestra errores

Si pasan las pruebas Wrapper, recarga el proyecto Gradle. JetBrains documenta que importar procesadores desde archivos de compilación activa automáticamente las anotaciones. Cambiar manualmente una casilla no es un paso obligatorio universal.

Comprueba después el soporte Lombok y la activación del plugin de tu versión IDE con la guía Lombok para IntelliJ. No generalices que una edición siempre necesita instalación manual y otra siempre lo incluye. Determina también si el IDE usa su compilador o delega en Gradle.

Si Gradle también falla por miembros ausentes, busca compileOnly sin annotationProcessor. Si solo fallan las pruebas, inspecciona las dos configuraciones de test. El verificador confirma el fallo al retirar por separado el procesador principal o el de pruebas, los restaura y verifica que vuelven a pasar las cinco pruebas. La interacción con la interfaz IDE queda fuera de esas comprobaciones.

Comentarios

Ver en GitHub ↗