Cloud 클라이언트 라이브러리 사용

프로젝트에 호환 가능한 Cloud 클라이언트 라이브러리 버전이 있는지 확인하려면 Google Cloud 라이브러리 BOM(Bill of Materials)에 명시된 버전을 사용하세요. BOM의 라이브러리에는 NoSuchMethodError 또는 NoClassDefFoundError로 나타나는 종속 항목 충돌이 없습니다.

Google에서는 Google Cloud에서 서비스를 더 쉽게 사용할 수 있도록 오픈소스 200개 이상의 자바 라이브러리를 게시하므로 BOM이 필요합니다. Google Cloud 라이브러리는 일반 용도로 사용할 수 있는 여러 기본 라이브러리에 의존합니다.

이 권장사항은 다음 라이브러리의 구성요소에 적용됩니다.

BOM을 사용하도록 프로젝트 업데이트

프로젝트에서 호환 가능한 라이브러리 및 구성요소 아티팩트 버전을 사용하도록 하려면 com.google.cloud:libraries-bom을 가져오고 BOM을 사용하여 종속 항목 버전을 지정합니다. 이전에 설정한 버전을 모두 삭제해야 합니다.

Maven

pom.xml 파일의 dependencyManagement 섹션에서 BOM을 가져옵니다. dependencies 섹션에 의존하는 특정 아티팩트를 포함하되 dependencies 섹션에 아티팩트 버전을 지정하지 마세요.

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>com.google.cloud</groupId>
        <artifactId>libraries-bom</artifactId>
        <version>25.4.0</version>
        <type>pom</type>
        <scope>import</scope>
       </dependency>
     </dependencies>
  </dependencyManagement>

  <dependencies>
    <dependency>
      <groupId>com.google.cloud</groupId>
      <artifactId>google-cloud-storage</artifactId>
    </dependency>
    <dependency>
      <groupId>com.google.guava</groupId>
      <artifactId>guava</artifactId>
    </dependency>
  </dependencies>

이 예시에서는 BOM이 라이브러리 버전을 관리하므로 google-cloud-storageguava 버전은 생략됩니다.

Gradle

BOM은 기본적으로 Gradle 5.x 이상에서 지원됩니다. com.google.cloud:libraries-bomplatform 종속 항목을 추가하고 아티팩트의 build.gradle 파일에 있는 종속 항목 선언에서 버전을 삭제합니다.

dependencies {
  implementation platform('com.google.cloud:libraries-bom:25.4.0')
  implementation 'com.google.cloud:google-cloud-storage'
  implementation 'com.google.guava:guava'
}

platformenforcedPlatform 키워드는 BOM에 선언된 종속 항목 버전을 제공합니다. enforcedPlatform 키워드는 BOM에 선언된 종속 항목 버전을 적용하므로 지정된 항목을 재정의합니다. Gradle 5.x 이상의 platformenforcedPlatform 키워드에 대한 자세한 내용은 Gradle: Maven BOM 가져오기를 참조하세요.

Gradle 4.6 이상을 사용하는 경우 settings.gradle 파일에 enableFeaturePreview('IMPROVED_POM_SUPPORT')를 추가합니다. 자세한 내용은 Gradle 4.6 출시 노트: BOM 가져오기를 참조하세요. 4.6 이전 버전의 Gradle은 BOM을 지원하지 않습니다.

SBT

SBT는 BOM을 지원하지 않습니다. 대시보드에서 특정 BOM 버전의 권장 라이브러리 버전을 찾아 수동으로 설정할 수 있습니다.

Bazel

Bazel은 BOM을 지원하지 않습니다. 대시보드에서 특정 BOM 버전의 권장 라이브러리 버전을 찾아 수동으로 설정할 수 있습니다.

Guava 버전 -jre 또는 -android

버전 21.0.0 출시 이후 라이브러리 BOM에는 Guava의 -jre 버전(자바 8 이상 지원)이 포함됩니다. 아래 섹션은 자바 8 사용자에게 적용되지 않습니다.


Google의 Guava 출시 버전에는 '-jre' 및 '-android' 버전의 두 가지 아티팩트가 포함되어 있습니다. '-jre'가 포함된 버전(예: com.google.guava:guava:31.1-jre)은 자바 8용이며 람다 함수 및 스트림을 지원합니다. '-android' 서픽스가 있는 다른 버전(예: com.google.guava:guava:31.1-android)은 자바 7 및 Android 개발용입니다.

Google Cloud 라이브러리 BOM에는 '-android' 버전이 포함된 Guava가 포함되어 자바 7에서 BOM이 작동하도록 합니다. 하지만 이는 BOM의 Guava 버전에 ImmutableList.toImmutableList()와 같이 자바 8 람다 함수를 위한 메서드가 없음을 의미합니다.

프로젝트에 자바 8 이상이 필요하며 com.google.common.collect.Streams와 같은 Guava 클래스를 사용하는 경우 Guava의 JRE 버전에 대한 종속 항목을 추가해야 합니다.

Maven의 경우:

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>31.1-jre</version>  <!-- "-jre" for Java 8 or higher -->
      </dependency>
    </dependencies>
    <dependencies>
      <dependency>
        <groupId>com.google.cloud</groupId>
        <artifactId>libraries-bom</artifactId>
        ...
  </dependencyManagement>

Gradle의 경우:

dependencies {
  constraints {
    implementation 'com.google.guava:guava:31.1-jre' // "-jre" for Java 8 or higher
  }
  implementation platform('com.google.cloud:libraries-bom:25.4.0')
  ...
}

enforcedPlatform을 사용하는 경우 enforcedPlatformconstraints보다 우선 적용되므로 이전 샘플은 작동하지 않습니다. enforcedPlatform을 Guava 버전과 함께 사용하려면 ResolutionStrategy를 구성하면 됩니다.