카테고리 없음
Gradle compileOnly와 AnnotationProcessor (feat. IntelliJ Lombok)
뽀글뽀글 개발자
2024. 9. 23. 11:15
Spring boot를 사용할 때는 문제가 없던 Lombok이 Maven project를 생성하니 인식이 안되는 문제가 발생했다.
그 이유는 Spring Initializer로 Lombok을 추가하면 아래와 같이 2개의 의존성이 추가되는 반면, Maven Repository에서 찾은 Lombok의 존성은 compileOnly 하나만 추가하기 때문이다.
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
compileOnly와 annotationProcessor의 차이
compileOnly는 말 그대로 컴파일 시점에만 참조되며, 빌드된 실행 파일에는 포함되지 않는다.
따라서 API 정의나 어노테이션 라이브러리처럼 코드 작성 시에만 필요한 의존성에 사용된다.
Lombok의 경우 컴파일 시에만 필요하고 런타임에는 필요하지 않기 때문에 compileOnly로 설정할 수 있다.
annotationProcessor는 어노테이션에 의해 정의된 프로세스를 동작하게 하는 역할을 한다.
즉, 컴파일 타임에 어노테이션을 기반으로 코드를 자동 생성하거나 변형하는데 필요하다.
결론적으로 Lombok은 컴파일 시에 getter, setter와 같은 코드를 어노테이션을 기반으로 자동 생성하고, 빌드된 실행 파일에는 필요하지 않기 때문에 compileOnly와 annotationProcessor가 모두 사용된다.
IntelliJ에 적용하기
Enable annotation processing을 체크하면 된다.