2016-12-26 10 views
2

Я использую protobuf3 для представления наших данных, в то время как нам нужна hbase для хранения данных, похоже, что hbase зависит от protobuf2.использовать protobuf3 с некоторым lib, который зависит от protobuf2 в Java

Когда я пишу следующую строку, чтобы создать нашу таблицу Hbase

admin.createTable(desc); 

тогда я получил Excepiton: NoClassDefFoundError: com/google/protobuf/LiteralByteString

Я попытался с помощью gradle's shadow plugin переместить com.google.protobuf в shadow.google .com, то он бросает аналогичное сообщение NoClassDefFoundError: shadow/google/protobuf/LiteralByteString.

+0

, если вы справитесь, как исправить это, напишите ответ – AdamSkywalker

+0

@AdamSkywalker. Я отправил свой ответ. Если это поможет, не стесняйтесь его повышать. – aLeX

ответ

0
  1. Создать подпроект, и назовите его «HBase-обертка»
  2. Перемещение зависимостей для HBase к новому проекту
  3. Shadow Protobuf в новом проекте
  4. Добавить зависимость в суб- проект основного проекта

Вот некоторые надрез код

// part of build.gradle of the sub-project 
... 
dependencies { 
    compile group: 'org.apache.hbase', name: 'hbase-client', version: '1.2.4' 
} 

shadowJar { 
    relocate('com.google.protobuf', 'hbasesaver.google.protobuf') 
} 

// part of build.gradle for main project 
... 
compile project(path: ':hbase-wrapper', configuration: 'shadow')