2016-05-23 172 views
1

感謝@nmittler on gRPC + SSL = UnsatisfiedLinkError我已經在我的Windows PC和目標Linux平臺上運行gRPC + SSL。gRPC + SSL +超級jar + Linux =無法加載netty-tcnative

但只有當我指定<classifier>io.netty/netty-tcnative-boringssl-static/1.1.33.Fork17依賴項。這可以是:

  1. 硬編碼(如以windows-x86_64
  2. 使用os-maven-plugin${os.detected.classifier}

注入但這意味着我只能上運行:

  1. Windows(或以我硬編碼的平臺爲準)
  2. 我用來編譯的平臺

但我想真的喜歡能夠做的就是在Windows上編譯但在Linux上運行。所以,在理論上,我可以離開<classifier>引入超級罐(如在the docs中指定)。

但是這不起作用:當我通過io.netty.util.internal.NativeLibraryLoader.load()步驟時,我找到一個System.mapLibraryName()的電話。

  • 在Windows上,此正確返回netty-tcnative.dll
  • 但在Linux(RHEL 7)返回libnetty-tcnative.so ...這是不是在尤伯杯罐子(jar tf netty-tcnative-boringssl-static-1.1.33.Fork17.jar回報等等,META-INF/native/libnetty-tcnative-linux-x86_64.so)。

望着分類的罐子,我可以看到它包含META-INF/native/libnetty-tcnative.so ......這意味着無論是超級罐子需要以不同的方式建立的 Linux版本(重命名libnetty-tcnative-linux-x86_64.solibnetty-tcnative.so)或NativeLibraryLoader地方需要採取帳戶的不同命名...

我在正確的軌道上?有人可以解決這個問題嗎?

回答

0

升級到io.grpc/grpc-all/0.14.0(從0.13.2)治好了我的問題,因爲它在io.netty/netty-handler4.1.0.CR74.1.0.CR3)的新版本帶來的。

0

你說得對,Maven Central上的超級jar包不包含共享庫。目前尚不清楚這個問題是否構建或部署該罐子。我已經提出了https://github.com/netty/netty-tcnative/issues/145來跟蹤修復。

+0

謝謝你。我已經爲該問題添加了2p值。 – Gavin

+1

脫機討論。 Maven上的超級罐子很好。看來問題在於你使用的是舊版本的Netty(4.1.0-CR3),它不支持uber jar。 Uber jar支持在4.1.0-CR4中引入,升級似乎解決了您的問題。 – nmittler