Using the Platform BOM

업데이트: Link

플랫폼 BOM 사용하기

플랫폼 BOM(Bill of Materials) 사용하기

Gradle과 Maven은 모두 개발자가 동일한 프레임워크에 속하는 종속성 버전을 정렬하는 데 활용할 수 있는 메커니즘 또는 함께 잘 작동하도록 정렬해야 하는 종속성의 우산을 정의합니다. 이를 사용하면 버전 충돌을 방지하고 서로 잘 작동하는 종속성 버전을 파악하는 데 도움이 됩니다.

시나리오를 살펴보고 graphql-dgs-spring-boot-startergraphql-dgs-subscriptions-websockets-autoconfigure를 모두 사용한다고 가정해 보겠습니다. 플랫폼/BOM을 사용하지 않으면 각각에 대한 버전을 정의해야 합니다. 버전이 명시적으로 유지되지 않는 한 나중에 버전이 갈라질 가능성이 있습니다. 예를 들어 graphql-dgs-client와 같이 각 모듈이 DGS 프레임워크의 서로 다른 종속성을 사용하는 다중 모듈 프로젝트가 있는 경우 종속성 버전을 수동으로 정렬하는 것이 더 어려워집니다. 플랫폼/BOM을 사용하는 경우 DGS 프레임워크의 버전한 곳에서만 정의하면 다른 모든 DGS 프레임워크 종속성이 동일한 버전을 사용하는지 확인합니다.

DGS 프레임워크의 경우 graphql-dgs-platform-dependenciesgraphql-dgs-platform이라는 두 가지 BOM 정의가 있습니다. 후자는 DGS 모듈에 대한 버전 정렬만 정의하는 반면 첫 번째는 Spring, Jackson 및 Kotlin과 같은 DGS 프레임워크의 종속성에 대한 버전도 정의합니다.

플랫폼 BOM 사용하기

:warning: 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 Plugingraphql-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-startergraphql-dgs-subscriptions-websockets-autoconfigure에는 지정되지 않습니다. BOM은 모든 DGS 종속성이 정렬되도록 즉, 동일한 버전을 사용하도록 합니다. 또한 graphql-dgs-platform-dependencies를 사용하고 있으므로 Jackson과 같은 일부 종속성의 DGS 선택 버전도 사용할 수 있습니다.

:warning: Note

플랫폼의 버전은 권장 사항입니다. 버전은 사용자 또는 사용 중인 다른 플랫폼에서 재정의할 수 있습니다.

댓글남기기