[Spring Boot, Lombok] Lombok gradle 5.x 이상 version dependency 설정 Error(Variable not initialized in the default constructor Error)

김우진·2022년 8월 24일
0
post-thumbnail

Lombok gradle 버전에 따른 Error

들어가기 전

이 글은 "스프링 부트와 AWS로 혼자 구현하는 웹 서비스" 책 구현 중 발생한 문제입니다.
동일한 문제로 gradle 버전 error issue에 Issue로 등록되어 다루고 있지만, 제가 확인했을 당시의 글 내용엔 gradle 버전을 낮추는 해결법에 대해서만 서술되어 있었습니다.

이 글에서는 gradle의 버전을 유지하면서 lombok을 사용하는 방법에 대해서만 서술하고 있습니다.
혹시 gradle 버전을 낮춰 진행하실 분은 위 링크 혹은 출처의 링크를 통해 jojoldu님의 Issue로 해결하시길 바랍니다.

gradle 버전을 유지하면서 lombok을 사용하는 방법에 대해서 서술하는 이유

버전은 앞으로 계속 발전되면서 달라질 것이고 이에 따라 설정 방식 및 코드 기술 방식 등이 달라질 텐대 책을 그대로 따라하기 보단, 최근 상태에 맞게 변경하여 진행하는 것이 좋다고 생각하였습니다.

Variable not initialized in the default constructor

@Data
@RequiredArgsConstructor
public class HelloResponseDto {
    private final String name;
    private final int amount;
}

위와 같이 Dto를 설정하였고 Getter, Setter, final 필드가 포함된 생성자를 생성하기위해 @Data, @RequiredArgsConstructor를 만들었습니다. 이 Dto를 테스트하기 위해 아래와 같이 Test Code를 작성하였습니다.

public class HelloResponseDtoTest {

    @Test
    public void 롬복_기능_테스트() {
        // given
        String name = "test";
        int amount = 1000;

        // when
        HelloResponseDto dto = new HelloResponseDto(name, amount);

        // then
        assertThat(dto.getName()).isEqualTo(name);
        assertThat(dto.getAmount()).isEqualTo(amount);
    }
}

하지만, 위의 Test Code를 실행하니 아래와 같은 에러가 발생하였습니다.

Error 해결

위의 Error는 Gradle 버전이 5.x 이상일 때 Gradle dependency 설정을 잘못해서 발생하는 Error입니다.

Gradle 버전에 따라서 Lombok dependency는 아래와 같이 설정해주어야 합니다.

Gradle 5.x 미만

dependencies {
  implementation 'org.projectlombok:lombok'
}

Gradle 5.x 이상

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

위와 같이 설정해준 뒤에는 Test가 정상적으로 성공하였습니다.

출처 및 참고 문헌

썸네일 출처

unsplash페이지의 Brett Jordan님

0개의 댓글