简体   繁体   中英

use protobuf3 with some lib which depends on protobuf2 in Java

I'm using protobuf3 to represent our data, while we need hbase to store the data, it seems like hbase depends on protobuf2.

When i write the following line to create our hbase table

admin.createTable(desc);

then I got an Excepiton: NoClassDefFoundError: com/google/protobuf/LiteralByteString

I've tried using gradle's shadow plugin to relocate com.google.protobuf to shadow.google.com, then it throw a similar message NoClassDefFoundError: shadow/google/protobuf/LiteralByteString .

  1. Create a sub-project, and name it 'hbase-wrapper'
  2. Move the dependencies for hbase to the new project
  3. Shadow protobuf in the new project
  4. Add dependency to the sub-project on the main project

Here's some snip code

// 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')

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM