感謝@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
依賴項。這可以是:
- 硬編碼(如以
windows-x86_64
) - 使用os-maven-plugin和
${os.detected.classifier}
注入但這意味着我只能上運行:
- Windows(或以我硬編碼的平臺爲準)
- 我用來編譯的平臺
但我想真的喜歡能夠做的就是在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.so
到libnetty-tcnative.so
)或NativeLibraryLoader
地方需要採取帳戶的不同命名...
我在正確的軌道上?有人可以解決這個問題嗎?
謝謝你。我已經爲該問題添加了2p值。 – Gavin
脫機討論。 Maven上的超級罐子很好。看來問題在於你使用的是舊版本的Netty(4.1.0-CR3),它不支持uber jar。 Uber jar支持在4.1.0-CR4中引入,升級似乎解決了您的問題。 – nmittler