Using the Platform BOM
업데이트: Link
플랫폼 BOM 사용하기
플랫폼 BOM(Bill of Materials) 사용하기
Gradle과 Maven은 모두 개발자가 동일한 프레임워크에 속하는 종속성 버전을 정렬하는 데 활용할 수 있는 메커니즘 또는 함께 잘 작동하도록 정렬해야 하는 종속성의 우산을 정의합니다. 이를 사용하면 버전 충돌을 방지하고 서로 잘 작동하는 종속성 버전을 파악하는 데 도움이 됩니다.
시나리오를 살펴보고 graphql-dgs-spring-boot-starter
와 graphql-dgs-subscriptions-websockets-autoconfigure
를 모두 사용한다고 가정해 보겠습니다. 플랫폼/BOM을 사용하지 않으면 각각에 대한 버전을 정의해야 합니다. 버전이 명시적으로 유지되지 않는 한 나중에 버전이 갈라질 가능성이 있습니다. 예를 들어 graphql-dgs-client
와 같이 각 모듈이 DGS 프레임워크의 서로 다른 종속성을 사용하는 다중 모듈 프로젝트가 있는 경우 종속성 버전을 수동으로 정렬하는 것이 더 어려워집니다. 플랫폼/BOM을 사용하는 경우 DGS 프레임워크의 버전을 한 곳에서만 정의하면 다른 모든 DGS 프레임워크 종속성이 동일한 버전을 사용하는지 확인합니다.
DGS 프레임워크의 경우 graphql-dgs-platform-dependencies
와 graphql-dgs-platform
이라는 두 가지 BOM 정의가 있습니다. 후자는 DGS 모듈에 대한 버전 정렬만 정의하는 반면 첫 번째는 Spring, Jackson 및 Kotlin과 같은 DGS 프레임워크의 종속성에 대한 버전도 정의합니다.
플랫폼 BOM 사용하기
Warning
Spring Boot Dependency Management Plugin을 사용하는 경우 DGS BOM이 graphql-java
버전 및 기타 관리 종속성을 제공합니다.
// gradle
dependencyManagement {
imports {
// We need to define the DGS BOM as follows such that the
// io.spring.dependency-management plugin respects the versions expressed in the DGS BOM, e.g. graphql-java
mavenBom("com.netflix.graphql.dgs:graphql-dgs-platform-dependencies:latest.release")
}
}
DGS BOM이 가져온 Maven BOM으로 dependencyManagement
블록에 표현되지 않은 경우 Spring Boot Dependency Management Plugin은 graphql-java
버전을 더 낮은 버전으로 강제합니다. 이로 인해 DGS 프레임워크 및 _federation library_와 같은 다른 아티팩트가 기대하는 것과 충돌이 발생합니다.
예를 살펴보고 DGS 프레임워크 3.10.2를 사용한다고 가정해 보겠습니다.
GradleGradle KotlinMaven
// gradle
repositories {
mavenCentral()
}
dependencies {
//DGS BOM/platform dependency. This is the only place you set version of DGS
implementation(platform('com.netflix.graphql.dgs:graphql-dgs-platform-dependencies:3.10.2'))
//DGS dependencies. We don't have to specify a version here!
implementation 'com.netflix.graphql.dgs:graphql-dgs-spring-boot-starter'
implementation 'com.netflix.graphql.dgs:graphql-dgs-subscriptions-websockets-autoconfigure'
//Additional Jackson dependency. We don't need to specify a version, because Jackson is part of the BOM/platform definition.
implementation 'com.fasterxml.jackson.datatype:jackson-datatype-joda'
//Other dependencies...
}
// kotlin
repositories {
mavenCentral()
}
dependencies {
//DGS BOM/platform dependency. This is the only place you set version of DGS
implementation(platform("com.netflix.graphql.dgs:graphql-dgs-platform-dependencies:3.10.2"))
//DGS dependencies. We don't have to specify a version here!
implementation("com.netflix.graphql.dgs:graphql-dgs-spring-boot-starter")
implementation("com.netflix.graphql.dgs:graphql-dgs-subscriptions-websockets-autoconfigure")
//Additional Jackson dependency. We don't need to specify a version, because Jackson is part of the BOM/platform definition.
implementation("com.fasterxml.jackson.datatype:jackson-datatype-joda")
//Other dependencies...
}
<!--maven-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.netflix.graphql.dgs</groupId>
<artifactId>graphql-dgs-platform-dependencies</artifactId>
<!-- The DGS BOM/platform dependency. This is the only place you set version of DGS -->
<version>3.10.2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- DGS dependencies. We don't have to specify a version here! -->
<dependency>
<groupId>com.netflix.graphql.dgs</groupId>
<artifactId>graphql-dgs-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.netflix.graphql.dgs</groupId>
<artifactId>graphql-dgs-subscriptions-websockets-autoconfigure</artifactId>
</dependency>
<!-- Additional Jackson dependency. We don't need to specify a version, because Jackson is part of the BOM/platform definition. -->
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-joda</artifactId>
</dependency>
<!-- Other dependencies -->
</dependencies>
버전은 플랫폼 종속성에만 지정되며 graphql-dgs-spring-boot-starter
및 graphql-dgs-subscriptions-websockets-autoconfigure
에는 지정되지 않습니다. BOM은 모든 DGS 종속성이 정렬되도록 즉, 동일한 버전을 사용하도록 합니다. 또한 graphql-dgs-platform-dependencies
를 사용하고 있으므로 Jackson과 같은 일부 종속성의 DGS 선택 버전도 사용할 수 있습니다.
Note
플랫폼의 버전은 권장 사항입니다. 버전은 사용자 또는 사용 중인 다른 플랫폼에서 재정의할 수 있습니다.
댓글남기기