Cloud クライアント ライブラリの使用

プロジェクトに互換性のあるバージョンの Cloud クライアント ライブラリが含まれていることを確認するには、Google Cloud ライブラリの部品表(BOM)で指定されたバージョンを使用します。BOM 内のライブラリには、NoSuchMethodError または NoClassDefFoundError として現われる依存関係の競合はありません。

Google Cloud でサービスを簡単に使用できるようにするために、Google は 200 を超えるオープンソース Java ライブラリを公開しているため、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

Gradle 5.x 以降では、BOM がデフォルトでサポートされています。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'
}

platform キーワードと enforcedPlatform キーワードは、BOM で宣言された依存関係のバージョンを指定します。enforcedPlatform キーワードは、BOM で宣言された依存関係のバージョンを適用します。したがって、指定したものはオーバーライドされます。Gradle 5.x 以降での platformenforcedPlatform キーワードの詳細については、Gradle: BOM のインポートをご覧ください。

Gradle 4.6 以降を使用している場合は、enableFeaturePreview('IMPROVED_POM_SUPPORT')settings.gradle ファイルに追加します。詳細については、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 フレーバー(Java 8 以降をサポート)が含まれています。以下のセクションは、Java 8 ユーザーには適用されません。


Google の Guava リリースには、2 つのフレーバーのアーティファクト(「-jre」と「-android」のバージョン)があります。「-jre」が付く方(com.google.guava:guava:31.1-jre など)は Java 8 用で、ラムダ関数とストリームをサポートします。「-android」の接尾辞が付くもう一方のフレーバー(com.google.guava:guava:31.1-android など)は、Java 7 と Android 開発用です。

Google Cloud ライブラリ BOM には、Java 7 で BOM が機能するように「-android」フレーバーの Guava が含まれています。ただし、BOM の Guava のバージョンには、Java 8 ラムダ関数(ImmutableList.toImmutableList() など)を対象とする一部のメソッドがありません。

プロジェクトで Java 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')
  ...
}

前述のサンプルは、enforcedPlatformconstraints よりも優先されるため、enforcedPlatform を使用する場合は機能しません。Guava フレーバーで enforcedPlatform を使用する場合は、ResolutionStrategy を構成できます。