[Spring Boot] Lombok cannot find symbol 에러

0. 배경

Spring Initializr로 따로 dependency를 추가하지 않고 스프링 부트 프로젝트를 생성했다.

이후 build.gradle.kts 파일에 Spring Web과 Lombok 라이브러리를 추가했다. (아래 두 줄)

그리고 아래와 같이 annotation processing을 활성화 처리했다.

dependencies {
	implementation("org.springframework.boot:spring-boot-starter")
	testImplementation("org.springframework.boot:spring-boot-starter-test")
	implementation("org.springframework.boot:spring-boot-starter-web")
	compileOnly("org.projectlombok:lombok")
}

 

1. 문제 상황

롬복 테스트를 위해 @Data를 사용해 get 메서드를 호출하니 cannot find symbol 에러가 발생했다.

package com.ssoyeong.studyapplication.controller;

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

@RestController
public class TestController {

    @GetMapping("/test/hello")
    public String getHello() {

        String name = new TestClass().getName();
        return "Hello world!";
    }
}

@Data
class TestClass {
    private String name;
    private String address;
}

 

2. 해결 과정

롬복 어노테이션을 인식하지 못해서 발생하는 문제이다.

롬복 라이브러리를 추가했으면 Annotation Processor 설정도 함께 해주어야 한다.

dependencies {
	implementation("org.springframework.boot:spring-boot-starter")
	testImplementation("org.springframework.boot:spring-boot-starter-test")
	implementation("org.springframework.boot:spring-boot-starter-web")
	compileOnly("org.projectlombok:lombok")
	annotationProcessor("org.projectlombok:lombok")
}

맨 아래에 한 줄을 추가했다.

 

3. 원인

annotationProcessor의 의미는

컴파일러가 어노테이션을 확인할 때, 해당 모듈의 것도 확인해 달라는 뜻이다.

그러므로 롬복은 어노테이션 기반이므로 annotationProcessor 키워드를 사용해 롬복 모듈을 추가하는 한 줄을 작성해야 했다.

 

참고자료

 

[자바, Java] Lombok - cannot find symbol 에러 해결 방법

.

tjdtls690.github.io

 

Spring Boot - build.gradle 파헤치기

1. Gradle 자바 프로젝트에서 외부 라이브러리를 가져다 쓴다는 것은 외부 라이브러리의 .jar를 가져와서 classpath에 추가하는 것이다. build.gradle이라는 파일에 가져다 쓸 라이브러리의 이름, 버전을

jsdysw.tistory.com