Esse conflito ocorre quando as versões de protobuf-java ou httpasyncclient incluídas no Tablestore SDK for Java entram em conflito com versões importadas por outras dependências do seu projeto Maven. Use o classificador jar-with-dependencies para resolver o problema.
Para diagnosticar o conflito, execute mvn dependency:tree no seu repositório e verifique se há múltiplas versões de protobuf-java, httpasyncclient ou tablestore na saída.
Descrição do problema
A seguinte exceção ocorre ao usar o Tablestore SDK for Java:
Caused by: java.lang.UnsupportedOperationException: This is supposed to be overridden by subclassed
at com.google.protobuf.GeneratedMessage.getUnknownFields(GeneratedMessage.java:225)
Causa
O Tablestore SDK for Java depende de protobuf-java V2.4.1 e httpasyncclient V4.0.2. Se o seu projeto — ou qualquer biblioteca da qual ele depende — também importar versões diferentes desses artefatos, o Maven carregará definições de classe conflitantes em tempo de execução, acionando a exceção acima.
Solução
Utilize o classificador jar-with-dependencies do artefato tablestore. Essa variante usa a realocação de pacotes para incluir protobuf-java e httpasyncclient em um namespace de pacote renomeado, de modo que não entrem mais em conflito com nenhuma outra versão dessas bibliotecas no classpath.
Adicione o seguinte ao seu pom.xml:
O classificador jar-with-dependencies inclui protobuf-java e httpasyncclient por meio de realocação de pacotes, eliminando a dependência externa de ambas as bibliotecas.
<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>
<!-- For example, the following libraries indirectly depend on Tablestore SDKs -->
<groupId>com.aliyun.xxxxxxx</groupId>
<artifactId>yyyyyy</artifactId>
<version>zzzzzzz</version>
<classifier>jar-with-dependencies</classifier>
<exclusions>
<!-- Remove the indirect dependency on the tablestore library -->
<exclusion>
<groupId>com.aliyun.openservices</groupId>
<artifactId>tablestore</artifactId>
</exclusion>
</exclusions>
</dependency>