全部產品
Search
文件中心

Tablestore:使用Java SDK時出現PB庫衝突

更新時間:Oct 01, 2024

當使用Table StoreJava SDK出現PB庫衝突時,您需要在Maven專案的pom.xml檔案中使用jar-with-dependencies版本的tablestore庫,並在tablestore庫中去除對protobuf-java和httpasyncclient的依賴,以及確認tablestore庫本身是否出現庫衝突。

說明

如何初步確認是否有PB庫、tablestore庫衝突?

在您的倉庫中,可以通過mvn dependency:tree列印依賴樹,在依賴樹中尋找protobuf-java、httpasyncclient和tablestore庫是否有不同版本的依賴。

現象

使用Java SDK時出現如下異常:

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

原因

Table StoreJava SDK依賴2.4.1版本的protobuf-java和4.0.2版本的httpasyncclient,容易與您的應用程式中內建的相同庫衝突;同時如果您依賴的其他庫間接依賴了tablestore庫,容易與您應用程式直接依賴的tablestore庫衝突。

解決方案

在Maven專案中的pom.xml中添加如下依賴即可。

說明

classifier為jar-with-dependencies,它將依賴的protobuf-java和httpasyncclient都通過rename package的方式打包進去,去除了對protobuf-java和httpasyncclient的依賴。

<dependency>
    <groupId>com.aliyun.openservices</groupId>
    <artifactId>tablestore</artifactId>
    <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>
    <!-- 假設以下為間接依賴tablestore SDK的庫 -->
    <groupId>com.aliyun.xxxxxxx</groupId>
    <artifactId>yyyyyy</artifactId>
    <version>zzzzzzz</version>
    <classifier>jar-with-dependencies</classifier>
    <exclusions>
        <!-- 去除對tablestore庫的間接依賴 -->
        <exclusion>
            <groupId>com.aliyun.openservices</groupId>
            <artifactId>tablestore</artifactId>
        </exclusion>
    </exclusions>
</dependency>