gRPC + SSL + uber jar + Linux =无法加载netty-tcnative

时间:2016-05-23 16:00:31

标签: linux ssl grpc

感谢gRPC + SSL = UnsatisfiedLinkError上的@nmittler我已经在我的Windows PC和目标Linux平台上运行了gRPC + SSL。

但仅当我为<classifier>依赖项指定io.netty/netty-tcnative-boringssl-static/1.1.33.Fork17时。那可以是:

  1. 硬编码(例如windows-x86_64
  2. 使用os-maven-plugin${os.detected.classifier}
  3. 注入

    但这意味着我只能继续:

    1. Windows(或我硬编码的任何平台)
    2. 我用来编译的平台
    3. 但我真正 能够做的就是在Windows上编译但在Linux上运行。所以,理论上,我可以放弃<classifier>来引入超级jar(如the docs中所述)。

      但这并不奏效:当我逐步完成io.netty.util.internal.NativeLibraryLoader.load()时,我发现了对System.mapLibraryName()的电话。

      • 在Windows上,这会正确返回netty-tcnative.dll
      • 但是在Linux(RHEL 7)上,它返回libnetty-tcnative.so ...它不在uber-jar中(jar tf netty-tcnative-boringssl-static-1.1.33.Fork17.jar返回,其中包括META-INF/native/libnetty-tcnative-linux-x86_64.so)。< / LI>

      查看jar的分类 linux版本,我可以看到它包含META-INF/native/libnetty-tcnative.so ...这意味着需要以不同的方式构建超级jar(重命名{{1} } libnetty-tcnative-linux-x86_64.so)或libnetty-tcnative.so某处需要考虑不同的命名......

      我是否在正确的轨道上?有人可以帮忙解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

你是对的,Maven Central上的超级jar不包含共享库。目前尚不清楚问题是构建还是部署jar。我已经提出https://github.com/netty/netty-tcnative/issues/145来跟踪修复。

答案 1 :(得分:0)

升级到io.grpc/grpc-all/0.14.0(来自0.13.2)解决了我的问题,因为它带来了io.netty/netty-handler的更新版本(4.1.0.CR74.1.0.CR3)。< / p>