プロジェクトに互換性のあるバージョンの 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-storage
と guava
のバージョンが省略されています。
Gradle
Gradle 5.x 以降では、BOM がデフォルトでサポートされています。com.google.cloud:libraries-bom
に platform
依存関係を追加し、アーティファクトの 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 以降での platform
と enforcedPlatform
キーワードの詳細については、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')
...
}
前述のサンプルは、enforcedPlatform
が constraints
よりも優先されるため、enforcedPlatform
を使用する場合は機能しません。Guava フレーバーで enforcedPlatform
を使用する場合は、ResolutionStrategy
を構成できます。