[Spring] variable not initialized in the default constructor 에러, class lombok.javac.apt.lombokprocessor cannot access class 에러 해결
package com.niwa32329.admin.springboot.web.dto;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
@Getter //선언된 모든 필드의 get메소드를 생성해줌.
@RequiredArgsConstructor //선언된 모든 final 필드가 포함된 생성자를 생성해줌. final이 없는 필드는 생성자에 포함x
public class HelloResponseDto {
private final String name;
private final int amount;
}
위와 같은 HelloResponseDto.java 코드를 작성 후, 테스트 코드를 작성하기 위해 아래와 같이 테스트 코드를 작성했었다.
package com.niwa32329.admin.springboot.web.dto;
import org.junit.Test;
import static org.assertj.core.api.Assertions.assertThat;
public class HelloResponseDtoTest {
@Test
public void lombok_test(){
//given
String name="test";
int amount=1000;
//when
HelloResponseDto dto = new HelloResponseDto(name,amount);
//then
assertThat(dto.getName()).isEqualTo(name);
//assertThat(): assertj라는 테스트 검증 라이브러리의 검증 메소드. 검증하고 싶은 대상을 인자로 받음.
//isEqualTo(): assertj의 동등 비교 메소드. assertThat에 있는 값과 isEqualTo의 값을 비교해서 같을 때만 성공.
assertThat(dto.getAmount()).isEqualTo(amount);
}
}
그런데 variable not initialized in the default constructor 라는 에러메시지가 뜨면서 run이 정상적으로 되지 않는 상황이 발생했다. 그래서 다음 블로그의 글을 참고하여 오류를 해결할 수 있었다.
https://deeplify.dev/back-end/spring/lombok-required-args-constructor-initialize-error
[스프링/Spring] Lombok: variable not initialized in the default constructor
RequiredArgsConstructor 사용 시 not initialized in the default constructor 에러가 발생하는 원인과 해결 방법에 대해서 소개합니다.
deeplify.dev
gradle 5.x 이상의 버전부터는 build.gradle에서 lombok 의존성을 추가하는 방법이 아래와 같이 변경되었기 때문에 기존의 것을 수정하여야 한다.
dependencies {
implementation('org.springframework.boot:spring-boot-starter-web')
compileOnly 'org.projectlombok:lombok' //수정한 부분
annotationProcessor 'org.projectlombok:lombok' //수정한 부분
testImplementation('org.springframework.boot:spring-boot-starter-test')
}
수정한 부분의 두 줄 코드를 추가하여 기존에 lombok 의존성을 추가했던 방법을 달리 해주었다.
그러나!!! 또 오류가 발생해버렸다.............
Cause: class lombok.javac.apt.LombokProcessor (in unnamed module @0x45489cf9)cannot access class com.sun.tools.javac.processing.JavacProcessingEnvironment(in module jdk.compiler)because module jdk.compiler does not export com.sun.tools.javac.processing to unnamedmodule @0x45489cf9
이번에는 위와 같은 에러가 발생했다..
이는 아래 블로그 링크에서 해답을 얻을 수 있었다.
[intellij] Lombok 추가 시 발생 오류 - Trouble shooting
인텔리제이 - Lombok 추가 시 발생한 오류 [오류] Cause: class lombok.javac.apt.LombokProcessor (in unnamed module @0x45489cf9) cannot access class com.sun.tools.javac.processing.JavacProcessingEn..
icea.tistory.com
이는 JDK가 Lombok가 호환이 안되는 것이 원인으로,
dependencies {
implementation('org.springframework.boot:spring-boot-starter-web')
compileOnly 'org.projectlombok:lombok:1.18.20'
annotationProcessor 'org.projectlombok:lombok:1.18.20'
testImplementation('org.springframework.boot:spring-boot-starter-test')
}
위에서 수정해줬었던 두 줄 코드에서 lombok 뒤에 1.18.20 버전을 명시해줌으로써 문제를 해결할 수 있었다.
잘 작동한다!! :)
댓글