互換性のあるバージョンの
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.0 と libraries-bom v26.75.0 のリリースノートをご覧ください。
Maven
pom.xml ファイルの dependencyManagement セクションに BOM をインポートします。依存する特定のアーティファクトを dependencies セクションに含めますが、dependencies セクションでアーティファクトのバージョンを指定しないでください。次の例は、BOM をインポートして google-cloud-storage アーティファクトを含める方法を示しています。
この例では、BOM がライブラリのバージョンを管理するため、google-cloud-storage のバージョンが省略されています。
Gradle
BOM は、Gradle 5.x 以降でデフォルトでサポートされています。com.google.cloud:libraries-bom に platform 依存関係を追加し、アーティファクトの build.gradle ファイルの依存関係宣言からバージョンを削除します。
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')
...
}
前述のサンプルは、enforcedPlatform が constraints よりも優先されるため、enforcedPlatform を使用する場合は機能しません。Guava バージョンで
enforcedPlatform を使用する場合は、
ResolutionStrategy を構成できます。