Untuk memastikan project Anda memiliki versi
Cloud Client Libraries yang kompatibel, gunakan versi yang ditentukan dalam Google Cloud
Bill of Materials (BOM) Library. Library dalam BOM tidak memiliki konflik dependensi yang akan muncul sebagai NoSuchMethodError atau NoClassDefFoundError.
BOM diperlukan karena Google memublikasikan lebih dari dua ratus library Java open source yang memudahkan penggunaan layanan di Google Cloud. Library Google Cloud bergantung pada beberapa library dasar yang dapat digunakan untuk tujuan umum.
Rekomendasi ini berlaku untuk komponen library berikut:
Memperbarui project untuk menggunakan BOM
Untuk memastikan project Anda menggunakan versi library dan artefak komponennya yang kompatibel, impor com.google.cloud:libraries-bom dan gunakan BOM untuk menentukan versi dependensi. Pastikan untuk menghapus versi yang Anda tetapkan sebelumnya.
Jika Anda mengalami masalah kompatibilitas dengan protobuf-java 4.x, perbarui codebase dan dependensi Anda untuk memastikan kompatibilitas. Lihat catatan rilis libraries-bom v26.50.0 dan libraries-bom v26.75.0 untuk mengetahui potensi masalah kompatibilitas.
Maven
Impor BOM di bagian dependencyManagement file pom.xml Anda.
Sertakan artefak tertentu yang Anda andalkan di bagian dependencies, tetapi jangan tentukan versi artefak di bagian dependencies. Contoh di bawah menunjukkan cara mengimpor BOM dan menyertakan artefak google-cloud-storage.
Dalam contoh ini, karena BOM mengelola versi library, versi google-cloud-storage akan dihilangkan.
Gradle
BOM didukung secara default di Gradle 5.x atau yang lebih baru. Tambahkan dependensi platform pada com.google.cloud:libraries-bom dan hapus versi dari deklarasi dependensi di file build.gradle artefak.
Kata kunci platform dan enforcedPlatform menyediakan versi dependensi yang dideklarasikan dalam BOM. Kata kunci enforcedPlatform menerapkan versi dependensi yang dideklarasikan dalam BOM dan dengan demikian mengganti apa yang Anda tentukan.
Untuk mengetahui detail selengkapnya tentang kata kunci platform dan enforcedPlatform Gradle 5.x atau yang lebih tinggi, lihat
Gradle: Mengimpor BOM Maven.
Jika Anda menggunakan Gradle 4.6 atau yang lebih baru, tambahkan
enableFeaturePreview('IMPROVED_POM_SUPPORT') ke file settings.gradle Anda.
Untuk mengetahui detailnya, lihat
Catatan Rilis Gradle 4.6: Impor BOM.
Versi Gradle yang lebih lama dari 4.6 tidak mendukung BOM.
SBT
SBT tidak mendukung BOM. Anda dapat menemukan versi library yang direkomendasikan dari versi BOM tertentu di dasbor dan menetapkan versi secara manual.
Bazel
Bazel tidak mendukung BOM. Anda dapat menemukan versi library yang direkomendasikan dari versi BOM tertentu di dasbor dan menetapkan versi secara manual.
Versi Guava -jre atau -android
Sejak rilis versi 21.0.0, BOM Library menyertakan versi -jre Guava (yang mendukung Java 8+). Bagian di bawah tidak berlaku untuk pengguna Java 8.
Rilis Guava Google berisi dua versi artefak: versi "-jre" dan "-android".
Versi dengan "-jre" (seperti com.google.guava:guava:31.1-jre) adalah untuk Java 8 dan mendukung fungsi serta aliran lambda.
Versi lainnya dengan akhiran "-android" (seperti com.google.guava:guava:31.1-android) adalah untuk pengembangan Java 7 dan Android.
BOM Google Cloud Library berisi Guava dengan versi "-android"
untuk memastikan BOM berfungsi di Java 7. Namun, ini berarti versi Guava dalam BOM tidak memiliki beberapa metode yang ditujukan untuk fungsi lambda Java 8, seperti ImmutableList.toImmutableList().
Jika project Anda memerlukan Java 8 atau yang lebih baru dan menggunakan class Guava seperti com.google.common.collect.Streams, Anda harus menambahkan dependensi pada versi JRE Guava.
Di 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>
Di 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')
...
}
Contoh sebelumnya tidak berfungsi jika Anda menggunakan enforcedPlatform karena enforcedPlatform lebih diutamakan daripada constraints. Jika ingin menggunakan
enforcedPlatform dengan versi Guava, Anda dapat mengonfigurasi
ResolutionStrategy.