All Products
Search
Document Center

Tablestore:Apa yang harus saya lakukan jika terjadi konflik library PB saat menggunakan Tablestore SDK untuk Java?

Last Updated:Apr 30, 2026

Konflik ini terjadi ketika versi protobuf-java atau httpasyncclient yang disertakan oleh Tablestore SDK untuk Java bentrok dengan versi yang ditarik oleh dependensi lain dalam proyek Maven Anda. Gunakan klasifikasi jar-with-dependencies untuk mengatasinya.

Catatan

Untuk mendiagnosis konflik, jalankan mvn dependency:tree di repositori Anda dan cari beberapa versi protobuf-java, httpasyncclient, atau tablestore dalam output.

Deskripsi masalah

Pengecualian berikut terjadi saat menggunakan Tablestore SDK untuk Java:

Caused by: java.lang.UnsupportedOperationException: This is supposed to be overridden by subclassed
        at com.google.protobuf.GeneratedMessage.getUnknownFields(GeneratedMessage.java:225) 

Penyebab

Tablestore SDK untuk Java bergantung pada protobuf-java V2.4.1 dan httpasyncclient V4.0.2. Jika proyek Anda—atau library apa pun yang menjadi dependensi proyek Anda—juga menarik versi berbeda dari artefak tersebut, Maven memuat definisi kelas yang saling bertentangan saat waktu proses, sehingga memicu pengecualian di atas.

Solusi

Beralihlah ke klasifikasi jar-with-dependencies dari artefak tablestore. Varian ini menggunakan package relocation untuk menyertakan protobuf-java dan httpasyncclient di bawah namespace paket yang telah diganti namanya, sehingga tidak lagi bentrok dengan versi lain dari library tersebut di classpath.

Tambahkan kode berikut ke pom.xml Anda:

Catatan

Klasifikasi jar-with-dependencies menyertakan protobuf-java dan httpasyncclient melalui package relocation, sehingga menghilangkan dependensi eksternal terhadap kedua library tersebut.

<dependency>
    <groupId>com.aliyun.openservices</groupId>
    <artifactId>tablestore</artifactId>
    <version>Your current version</version>
    <classifier>jar-with-dependencies</classifier>
    <exclusions>
        <exclusion>
            <groupId>com.google.protobuf</groupId>
            <artifactId>protobuf-java</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpasyncclient</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <!-- Contohnya, library berikut secara tidak langsung bergantung pada SDK Tablestore -->
    <groupId>com.aliyun.xxxxxxx</groupId>
    <artifactId>yyyyyy</artifactId>
    <version>zzzzzzz</version>
    <classifier>jar-with-dependencies</classifier>
    <exclusions>
        <!-- Hapus dependensi tidak langsung terhadap library tablestore -->
        <exclusion>
            <groupId>com.aliyun.openservices</groupId>
            <artifactId>tablestore</artifactId>
        </exclusion>
    </exclusions>
</dependency>