используйте protobuf3 с некоторой lib, которая зависит от protobuf2 в Java


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

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

admin.createTable(desc);

Затем я получил исключение: NoClassDefFoundError: com/google/protobuf/LiteralByteString

Я пробовал использовать теневой плагин gradle для перемещения com.гугл.протобуф к shadow.google.com, то он бросит аналогичное сообщение NoClassDefFoundError: shadow/google/protobuf/LiteralByteString.

1   2   2016-12-26 07:01:25

1 ответ:

  1. Создайте подпроект и назовите его "HBase-wrapper"
  2. переместить зависимости для hbase в новый проект
  3. теневой протобуф в новом проекте
  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')