2016-12-26 106 views
2

我使用protobuf3來表示我們的數據,而我們需要hbase來存儲數據,它看起來像hbase取決於protobuf2。使用protobuf3與一些依賴於Java中的protobuf2的lib

當我寫了下面這行來創建我們的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. 陰影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')