Java 用 Cloud クライアント ライブラリで部品表(BOM)を使用する

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

でサービスを簡単に使用できるようにするために、Google は 200 を超えるオープンソース Java ライブラリを公開しているため、BOM が必要です Google Cloud。これらの Google Cloud ライブラリは、一般的な用途に使用できるいくつかの基本ライブラリに 依存しています。

これらの推奨事項は、次のライブラリのコンポーネントに適用されます。

BOM を使用するようにプロジェクトを更新する

プロジェクトでライブラリとそのコンポーネント アーティファクトの互換性のあるバージョンが使用されるようにするには、com.google.cloud:libraries-bom をインポートし、BOM を使用して依存関係のバージョンを指定します。 以前に設定したバージョンは必ず削除してください。

protobuf-java 4.x で互換性の問題が発生した場合は、コードベース と依存関係を更新して互換性を確保します。互換性の問題については、libraries-bom v26.50.0libraries-bom v26.75.0 のリリースノートをご覧ください。

Maven

pom.xml ファイルの dependencyManagement セクションに BOM をインポートします。依存する特定のアーティファクトを dependencies セクションに含めますが、dependencies セクションでアーティファクトのバージョンを指定しないでください。次の例は、BOM をインポートして google-cloud-storage アーティファクトを含める方法を示しています。

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>com.google.cloud</groupId>
      <artifactId>libraries-bom</artifactId>
      <version>26.78.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.cloud</groupId>
    <artifactId>google-cloud-storage-control</artifactId>
  </dependency>
</dependencies>

この例では、BOM がライブラリのバージョンを管理するため、google-cloud-storage のバージョンが省略されています。

Gradle

BOM は、Gradle 5.x 以降でデフォルトでサポートされています。com.google.cloud:libraries-bomplatform 依存関係を追加し、アーティファクトの build.gradle ファイルの依存関係宣言からバージョンを削除します。

implementation platform('com.google.cloud:libraries-bom:26.78.0')

implementation 'com.google.cloud:google-cloud-storage'

platform キーワードと enforcedPlatform キーワードは、BOM で宣言された依存関係のバージョンを提供します。enforcedPlatform キーワードは、BOM で宣言された依存関係のバージョンを適用するため、指定した内容がオーバーライドされます。Gradle 5.x 以降の platform キーワードと enforcedPlatform キーワードの詳細については、 Gradle: Maven 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 のリリース以降、Libraries 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 開発用です。

Libraries BOM には、BOM が Java 7 で動作するように、「-android」バージョンの Guava が含まれています。 Google Cloud ただし、これは、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:26.12.0')
  ...
}

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