Spring에서 제공해주는 여러 starter들을 사용하면 별도 의존성 버전을 명시해주지 않아도 여러 라이브러리들이 각각의 버전으로 추가되는 것을 확인할 수 있습니다.
dependencies {
testImplementation("org.springframework.boot:spring-boot-starter-test")
}
./gradlew dependencies
+--- org.springframework.boot:spring-boot-starter-test -> 2.3.12.RELEASE
| +--- org.springframework.boot:spring-boot-starter:2.3.12.RELEASE (*)
| +--- org.springframework.boot:spring-boot-test:2.3.12.RELEASE
| | \--- org.springframework.boot:spring-boot:2.3.12.RELEASE (*)
| +--- org.springframework.boot:spring-boot-test-autoconfigure:2.3.12.RELEASE
| | +--- org.springframework.boot:spring-boot:2.3.12.RELEASE (*)
| | +--- org.springframework.boot:spring-boot-test:2.3.12.RELEASE (*)
| | \--- org.springframework.boot:spring-boot-autoconfigure:2.3.12.RELEASE (*)
| +--- com.jayway.jsonpath:json-path:2.4.0
| | +--- net.minidev:json-smart:2.3 -> 2.3.1
| | | \--- net.minidev:accessors-smart:2.3.1
| | | \--- org.ow2.asm:asm:5.0.4
| | \--- org.slf4j:slf4j-api:1.7.25 -> 1.7.30
| +--- jakarta.xml.bind:jakarta.xml.bind-api:2.3.3 (*)
| +--- org.assertj:assertj-core:3.16.1
| +--- org.hamcrest:hamcrest:2.2
| +--- org.junit.jupiter:junit-jupiter:5.6.3
별도 버전 없이도 위와 같은 의존성들을 사용할 수 있는 것은 io.spring.dependency-management
플러그인이 의존성들의 버전을 관리해주기 때문입니다.
apply(plugin = "io.spring.dependency-management")
Customizing Managed Versions
특정 버전의 버그나 이슈로 인해 플러그인이 관리하는 버전을 변경하려면 아래와 같은 두가지 방법을 사용할 수 있습니다.
- version property override
ext["logback.version"] = "1.2.9"
- dependency management의 bomProperty
dependencyManagement {
imports {
mavenBom('io.spring.platform:platform-bom:1.0.1.RELEASE') {
bomProperty 'spring.version', '4.0.4.RELEASE'
}
}
}
Spring Boot는 여러 의존성들에 대해 설계 및 테스트 되었으므로, 버전을 임의로 변경하는 경우 호환성 관련 이슈가 발생할 수 있습니다. 가급적 변경하지 않는 것이 좋습니다.
Dependency Sets
그룹이나 버전이 동일한 경우 dependencySet을 활용해 아래처럼 사용할 수 있습니다.
dependencyManagement {
dependencies {
dependencySet("org.slf4j:1.7.7") {
entry("slf4j-api")
entry("slf4j-simple")
}
}
}
Importing a Maven Bom
프로젝트 내에서 직접 의존성의 버전을 명시하지 않고 maven bom을 가져와서 의존성 관리를 할 수 있습니다.
여러 이상의 bom을 가져오는 경우에 bom은 순서대로 처리되며, 동일한 dependency에 대한 bom이 있는 경우 나중에 추가된 bom의 의존성 버전이 사용됩니다.
dependencyManagement {
imports {
mavenBom("io.spring.platform:platform-bom:1.0.1.RELEASE")
}
}
dependencies {
implementation("org.springframework.integration:spring-integration-core")
}
Spring Managed Dependency Versions
스프링에서 관리되는 의존성 버전 및 버전 프로퍼티 정보는 아래 링크에서 확인할 수 있습니다.
스프링 버전별로 관리되는 버전이 다르기 때문에 버전 별 아래 링크의 주소를 변경해주셔야 합니다.
Reference
개인적인 기록을 위해 작성된 글이라 잘못된 내용이 있을 수 있습니다.
오류가 있다면 댓글을 남겨주세요.