본문 바로가기

Java/Spring Boot

Lombok 의존성 설정 시 왜 compileOnly, annotationProcessor로 설정되는걸까? - gradle 의존성 구성 정보 알아보기

gradle 3.0의 Dependency Configurations

  • 참고로 gradle 3.0 이전 버전과의 차이는 다음과 같습니다
    • compile → implementation / api
    • testCompile → testImplementation
    • debugCompile → debugImplementation
    • provided → compileOnly
  • compileOnly : compile 시점에만 필요한 의존성을 정의하는 데 사용. 사용하려는 라이브러리가 컴파일 타임에만 필요하고, 런타임 시점에는 필요하지 않을 때 사용합니다. compileClassPath에만 추가되어 결과적으로 build 결과물의 크기를 줄일 수 있습니다.(JAR파일에 포함되지 않기 때문). (ex)Lombok
  • runtimeOnly : 라이브러리가 runtimeClassPath에만 추가됩니다. 컴파일 시점에는 필요없는데 런타임에서는 의존하는 파일일 때 사용합니다 (ex)DB관련이나 로그 관련 dependency)
  • implementation : 컴파일 시점과 런타임 시점 라이브러리가 필요한 경우 사용합니다. 의존 라이브러리 수정 시 본 모듈까지만 재빌드합니다
  • api : 의존 라이브러리 수정 시 본 모듈을 의존하는 모듈들도 재빌드 합니다
  • annotationProcessor : 컴파일 시점에서 사용되는 어노테이션 처리 모듈을 정의합니다.

Lombok 의존성 추가 시 

설정되는 항목은 다음과 같습니다

compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'

 

Compile 시점에 annotation 처리 모듈로 사용되어야 하고, 런타임 시점에서는 필요하지 않기 때문에, annotationProcessor 및 compileOnly로 구성되고 있는 것을 알 수 있습니다.