이 글은 "스프링 부트와 AWS로 혼자 구현하는 웹 서비스" 책 구현 중 발생한 문제입니다.
동일한 문제로 gradle 버전 error issue에 Issue로 등록되어 다루고 있지만, 제가 확인했을 당시의 글 내용엔 gradle 버전을 낮추는 해결법에 대해서만 서술되어 있었습니다.
이 글에서는 gradle의 버전을 유지하면서 lombok을 사용하는 방법에 대해서만 서술하고 있습니다.
혹시 gradle 버전을 낮춰 진행하실 분은 위 링크 혹은 출처의 링크를 통해 jojoldu님의 Issue로 해결하시길 바랍니다.
gradle 버전을 유지하면서 lombok을 사용하는 방법에 대해서 서술하는 이유
버전은 앞으로 계속 발전되면서 달라질 것이고 이에 따라 설정 방식 및 코드 기술 방식 등이 달라질 텐대 책을 그대로 따라하기 보단, 최근 상태에 맞게 변경하여 진행하는 것이 좋다고 생각하였습니다.
@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는 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가 정상적으로 성공하였습니다.