Spring Boot 로 프로그램을 작성하고 난 후에 Compile 단계에서 다음과 같은 오류를 만날 수 있다.
EmployeeServiceImpl.java:13: error: constructor Employee in class Employee cannot be applied to given types;
return Mono.just(new Employee(empId, "emp1", "manager", 3000));
^
required: no arguments
found: Long,String,String,int
reason: actual and formal argument lists differ in length
에러 코드를 보면 new 연산자를 이용해 Employee 객체를 생성하는 부분인데, 이부분이 문제가 된다는 것이다. required: no arguments 라고 나오지만 Employee 는 다음과 같이 되어 있다.
package local.systemv.springboot.test.apps.model;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
@AllArgsConstructor
@Getter
@Setter
public class Employee {
private Long empId;
private String name;
private String description;
private double salary;
}
@AllArgsConstructor 어노테이션을 줘서 자동으로 모든 객첵 멤버변수를 인자로 받는 컨스트럭터를 생성하도록 하고 했다. 이것은 Lombok 을 이용한 것으로 다음과 같이 gradle 에서 의존성을 줬다.
compileOnly group: 'org.projectlombok', name: 'lombok', version: '1.18.16'
문제는 Eclipse 나 IDE 툴에서는 SpringBoot 애플리케이션이 잘만 실행되지만 정작 컴파일을 할려고 하면 위와같은 오류가 나오는다는 것이다. 아무리 봐도 소스코드상에서는 아무런 문제가 없는데도 이런다면 다음과 같이 gradle 에서 annotationProcessor 를 추가해주면 된다.
compileOnly group: 'org.projectlombok', name: 'lombok', version: '1.18.16' annotationProcessor 'org.projectlombok:lombok'
Maven 을 사용할 경우에는 아무런 문제가 없었지만, Gradle 을 사용하면서 Lombok 을 사용한다면 반드시 annotationProcessor 를 추가해줘야 한다.
IntelliJ 에서는 설정에서 “Enabling Annotation Processing” 체크하면 된다.