Spring Boot로 개발 중 build.gradle에 dependencies에 들어가는 configuration들의 종류와 기능이 궁금해서 찾아봤다.
어떤 것들이 있는지 어떤 기능인지 이번 기회에 깔끔하게 정리 좀 해야겠다.
Dependency Configuration이란?
gradle 프로젝트를 만들면 위와 같이 build.gradle에 dependencies에 의존하고 있는 라이브러리들이 명시되어 있다.
밑줄로 표시해놓은 것들을 configuration이라고 공식 문서에서 부르고 있다.
어떤 것들이 있는지 알아보자.
Dependency Configuration 종류 및 기능
complieOnly
컴파일할 때만 사용
compileOnly로 의존성을 추가하면 jar에 포함되지 않아 가벼워진다.
dependencies {
compileOnly 'org.springframework.boot:spring-boot-starter'
compileOnly 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
위와 같이 의존성을 추가한 후에 "gradle bootJar" 명령어로 jar를 만든 후 BOOT-INF - lib에 보니 compileOnly로 추가한 의존성 라이브러리는 추가가 되지 않은 것을 볼 수 있다. (jar로 빌드하는 방법은 아래 포스팅을 참고)
현재는 전부 complieOnly라 기본 lib만 있는 게 정상이다.
runtimeOnly
런타임에만 사용 (ex. db-connector, mysql, h2)
컴파일할 때는 필요없는 라이브러리 의존성 추가할 때 사용한다.
dependencies {
compileOnly 'org.springframework.boot:spring-boot-starter'
compileOnly 'org.springframework.boot:spring-boot-starter-web'
runtimeOnly 'com.h2database:h2:2.1.214'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
h2를 runtimeOnly로 추가한 후에 bootJar로 빼서 봤더니 lib에 추가된 걸 볼 수 있다.
dependencies {
runtimeOnly 'org.springframework.boot:spring-boot-starter'
runtimeOnly 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
컴파일할 때 필요한 라이브러리를 runtimeOnly로 등록하게 되면
코드 작성할 때 사용할 수 없어진다.
위처럼 라이브러리를 찾을 수 없어진다.
annotationProcessor
어노테이션 프로세서 사용하는 라이브러리인 경우 사용, 컴파일에만 적용 (ex. lombok)
옛날 버전에서는 compileOnly를 썼었는데 최신 버전에서는 사용이 불가능하다.
implementation
컴파일 + 런타임
컴파일에도 필요하고 런타임에도 필요할 때 사용
api
api로 추가한 라이브러리에서 의존하고 있는 라이브러리에 의존하고자 할 때 사용 (컴파일 + 런타임)
a가 b 라이브러리를 api로 추가하면 a는 b에서 사용 중인 라이브러리 c를 사용할 수 있다.
이 방법은 조심해야 하는데 b에서 사용하고 있는 라이브러리 c를 d로 바꾼다면? a가 사용하는 c가 사라졌기 때문에 문제가 발생할 수도 있다.
testCompileOnly
테스트 코드 컴파일할 때만 사용
testRuntimeOnly
테스트 런타임에 사용
testImplementation
테스트 컴파일 + 런타임에 사용
참고
'Gradle' 카테고리의 다른 글
[Kotlin 번역] What's new in Kotlin 2.1.0-RC (0) | 2024.11.14 |
---|---|
Lombok 사용 시 error: cannot find symbol 에러가 발생한다면? Gradle 버전 변경을!! (0) | 2020.12.08 |
댓글