Dependency-Configurations
1 Gradle Dependency Configurations
- 레퍼런스
- Gradle을 사용하여 프로젝트를 관리할 때, 의존성 관리는 매우 중요한 부분입니다.
- Gradle의 dependency configurations는 의존성의 범위와 사용 목적을 정의하는 강력한 도구입니다.
- 이 글에서는 주요 dependency configurations의 의미와 사용법, 그리고 언제 어떤 configuration을 사용해야 하는지 자세히 알아보겠습니다.
2 implementation
implementation
은 가장 일반적으로 사용되는 configuration입니다.- 컴파일 타임과 런타임 모두에서 필요한 의존성을 정의합니다.
- 이 의존성은 프로젝트의 소스 코드를 컴파일하는 데 사용되며, 런타임에도 필요합니다.
implementation
으로 정의된 의존성은 프로젝트를 사용하는 다른 모듈로 전이되지 않습니다.
예시 코드
implementation 'org.springframework.boot:spring-boot-starter-web'
- 위 예시는 Spring Boot Web Starter를 프로젝트에 추가하는 것을 보여줍니다.
- 이 의존성은 컴파일 시와 런타임에 모두 필요하지만, 다른 모듈로 전이되지 않습니다.
3 api (Java Library 플러그인 전용)
api
는implementation
과 유사하지만, 의존성 전이 측면에서 차이가 있습니다.- 컴파일 타임과 런타임에 필요하며, 다른 모듈로도 전이되어야 하는 의존성을 정의합니다.
- 주로 라이브러리를 개발할 때 사용됩니다.
api
로 정의된 의존성은 프로젝트를 사용하는 다른 모듈로 전이됩니다.
예시 코드
api 'com.google.guava:guava:30.1-jre'
- 위 예시는 Google Guava 라이브러리를 프로젝트에 추가하고, 이를 사용하는 다른 모듈에서도 사용할 수 있게 합니다.
- 라이브러리 개발 시 공개 API에 사용되는 의존성에 적합합니다.
4 compileOnly
compileOnly
는 컴파일 시에만 필요한 의존성을 위한 configuration입니다.- 컴파일 타임에만 필요하고 런타임에는 필요 없는 의존성을 정의합니다.
- 주로 어노테이션 프로세서나 컴파일 시 유틸리티에 사용됩니다.
- 런타임에 클래스패스에 포함되지 않으므로 메모리 사용량을 줄일 수 있습니다.
예시 코드
compileOnly 'org.projectlombok:lombok:1.18.20'
- 위 예시는 Lombok 라이브러리를 컴파일 시에만 사용하도록 추가합니다.
- Lombok은 컴파일 시 코드를 생성하지만, 런타임에는 필요하지 않습니다.
5 runtimeOnly
runtimeOnly
는 런타임에만 필요한 의존성을 위한 configuration입니다.- 런타임에만 필요하고 컴파일 타임에는 필요 없는 의존성을 정의합니다.
- 주로 데이터베이스 드라이버나 로깅 라이브러리에 사용됩니다.
- 컴파일 시간을 단축시킬 수 있습니다.
예시 코드
runtimeOnly 'com.h2database:h2'