[Gradle] 의존성 옵션

2022. 5. 1. 00:42Web/Spring

[Gradle] 의존성 옵션

 

gradle을 이용하여 공부를 하는 와중에 의존성 옵션을 한번 정리하고자 한다. 우리가 이용하는 build.gradle을 이용해 maven과 다르게 xml파일을 작성할 필요 없이 외부에서 라이브러리를 다운로드하여서 사용할 수 있게 해 준다.

그러나 이 gradle을 이용하면서 등장하는 다양한 의존성 옵션들이 존재하는데 이 옵션들이 각각 무엇을 의미하는지 알아야 잘 쓸 수 있다고 생각을 하여 정리를 하게 되었다.

 

의존성 옵션

자주 보이는 의존성 옵션들이다. 각각의 옵션들은 모듈의 주입 방법을 따진다. 사용에 맞는 의존성 옵션의 유무는 빌드 시간의 단축 혹은 연장을 가져올 수 있다.

  • implementation : 주입되는 외부 모듈 수정 시 본 모듈까지만 rebuild
    • 사용자에게 필요 이상의 API를 노출하지 않는다. 
    • 직접적으로 관계되는 모듈까지만 rebuild 하기에 빠르게 접근이 가능
      • 기존 컴파일에서 개선된 방향이다. compile의 경우 연계된 모든 프로젝트의 모듈을 가져온다면, implementation의 경우 수정 시 영향을 받은 모듈만 가져와서 rebuild 한다.
  • api(compile)
    • implementation과 달리 연계가 된 프로젝트에 API가 노출이 된다. 
    • 현재 gradle에서는 사용하지 않기를 권장하는 추세이다. 대신 implementation으로 대체되었다.
  • compileOnly
    • 프로그램을 compile 시에만 빌드하고 결과물에는 포함하지 않는다
  • runtimeOnly
    • runtime 시에만 필요한 모듈의 경우 사용한다. 즉 컴파일 시점에는 사용되지 않는다.
  • annotationProcessor
    • 기존의 lombok을 사용 시 필수적으로 들어가야 했던 항목이다. 
    • 기존의 컴파일러는 lombok 제공의 어노테이션을 인지하지 못했지만 annotationProcessor를 사용 시 인식 가능하다. 
      • intelli j의 경우 File -> settings -> Build, Exception, Deployment -> Compiler -> Annotation Processors 경로에 존재하는 Enable annotation processing 체크박스에 체크를 해주면 같은 기능을 넣을 수 있다.