当前位置: 首页 > 知识库问答 >
问题:

着色后io.netty tcnative停止工作

艾学海
2023-03-14

由于依赖关系中的冲突,我想为io.netty添加阴影。着色后,本机ssl库(netty-tcnative-boringssl-static)的加载将停止工作。

主pom

...
<dependency>
    <groupId>com.example.myapp</groupId>
    <artifactId>pubsub-library<artifactId>
    <version>1.0</version>
</dependency>
...
...
<dependency>
    <groupId>com.google.cloud</groupId>
    <artifactId>google-cloud-pubsub</artifactId>
    <version>0.24.0-beta</version>
<dependency>
...
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-shade-plugin</artifactId>
  <version>3.1.0</version>
  <executions>
      <execution>
          <phase>package</phase>
          <goals>
              <goal>shade</goal>
          </goals>
          <configuration>
              <relocations>
                  <relocation>
                      <pattern>io.netty</pattern>
                          <shadedPattern>com.example.myapp.shaded.io.netty</shadedPattern>
                  </relocation>
              </relocations>
           </configuration>
       </execution>
   </executions>
</plugin>
...

pubsub有以下3个依赖项:io.netty:nettycodec-http2:jar:4.1.14.finalio.netty:netty-handler-proxy:jar:4.1.14.finalio.netty:netty-tcnative-boringssl-static:jar:2.0.3.final

错误

io.netty.util.internal.NativeLibraryLoader尝试加载本机库时会出现问题。它给我的错误如下:

17:44:48.230 [main] DEBUG com.example.myapp.shaded.io.netty.util.internal.NativeLibraryLoader - -Dio.netty.tmpdir: /var/folders/ll/wy1vgf8945l_87mpfc9ylb94fglr7d/T (java.io.tmpdir)
17:44:48.230 [main] DEBUG com.example.myapp.shaded.io.netty.util.internal.NativeLibraryLoader - -Dio.netty.native.workdir: /var/folders/ll/wy1vgf8945l_87mpfc9ylb94fglr7d/T (io.netty.tmpdir)
17:44:48.241 [main] DEBUG com.example.myapp.shaded.io.netty.util.internal.NativeLibraryLoader - Unable to load the library 'com.example.myapp-shaded-netty-tcnative-osx-x86_64', trying other loading mechanism.
java.lang.UnsatisfiedLinkError: no com.example.myapp-shaded-netty-tcnative-osx-x86_64 in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
    at java.lang.Runtime.loadLibrary0(Runtime.java:870)
    at java.lang.System.loadLibrary(System.java:1122)
    at com.example.myapp.shaded.io.netty.util.internal.NativeLibraryUtil.loadLibrary(NativeLibraryUtil.java:38)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.example.myapp.shaded.io.netty.util.internal.NativeLibraryLoader$1.run(NativeLibraryLoader.java:311)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.example.myapp.shaded.io.netty.util.internal.NativeLibraryLoader.loadLibraryByHelper(NativeLibraryLoader.java:303)
    at com.example.myapp.shaded.io.netty.util.internal.NativeLibraryLoader.loadLibrary(NativeLibraryLoader.java:291)
    at com.example.myapp.shaded.io.netty.util.internal.NativeLibraryLoader.load(NativeLibraryLoader.java:224)
    at com.example.myapp.shaded.io.netty.util.internal.NativeLibraryLoader.loadFirstAvailable(NativeLibraryLoader.java:172)
    at com.example.myapp.shaded.io.netty.handler.ssl.OpenSsl.loadTcNative(OpenSsl.java:423)
    at com.example.myapp.shaded.io.netty.handler.ssl.OpenSsl.<clinit>(OpenSsl.java:91)
    at com.example.myapp.job.audit.GoogleCloudCompatChecker.check(GoogleCloudCompatChecker.java:30)
    at com.example.myapp.job.audit.AuditJobMain.main(AuditJobMain.java:8)

我已经查看了主POM生成的jar内部。并且没有与该名称匹配的本机库。这是在meta-inf/native目录中:

libnetty-tcnative-linux-x86_64.so
libnetty-tcnative-osx-x86_64.jnilib
libnetty-transport-native-epoll.so
linux32
linux64
netty-tcnative-windows-x86_64.dll
osx
windows32
windows64

我做错了什么?我如何在不破坏TCnative的情况下遮蔽IO.Netty。

共有1个答案

苍元章
2023-03-14

看看NativeLibraryLoader源代码。

这可能与您正在使用的版本不同,但它表明它使用了很少的启发式来查找本机库,并且最可行的是,这些启发式在shade上失败,但可能很容易修复

仔细研究代码,可能重写/调试/日志记录NativeLibraryLoader。

您是否被迫使用某些依赖库的两个版本,从而不能仅仅使用maven排除?

 类似资料:
  • 问题内容: 有时,当我调用Selenium FindElements(By)时,它将引发异常,并且驱动程序停止工作。参数“ BY”可能是问题所在:当我使用其他BY搜索相同的元素时,它起作用了。 我也可以看到,即使我的元素存在,或者之前曾调用过带有相同参数的相同方法,也不会阻止该方法引发异常。 我的方法是: 一个BY值的示例并非始终有效(即使它存在于页面中): 例外: WebDriverExcept

  • null GrantPermissionRule是否停止了为其他人所宣传的工作?

  • 问题内容: 我正在尝试创建一个数据表,该数据表在忙时显示一个blockUI,并且我大多数时候都成功了。现在,当我单击两个commandButtons中的任何一个,通过单击标题对数据表进行排序,或在数据表中翻页时,它都会变灰并显示“正在加载…”。您可以在下面查看其代码。 问题是,在我使用了一个commandButtons(在受阻止的元素上运行ajax更新)之后,后续操作不会触发blockUI(直到刷

  • 我正在用Unity 2018.2.2(最新版本于2018年8月8日)开发一款android小游戏。我在这个游戏上工作了几周,但现在,Unity在试图找到我的JDK时毫无理由地失败了。当我分配文件夹时(编辑- [如果您看不到图像:“未能检测到Java版本。Android开发需要JDK 8(1.8)。安装JavaRunatime环境(JRE)是不够的。”] 第一个我想的是,它可能会因为JDK的更新而失

  • 我正在通过conda安装pymc,它告诉我更新一些文件,所以没有问题。然而,在更新后,它给出了一个OSError,现在,我不能访问任何conda构建命令。现在,当我键入任何conda命令时,它会给我

  • 我在XAMPP中启动MYSQL时遇到了问题。Apache启动正常,但MYSQL不断报告意外关机。 我被引导删除,它在此之后工作,但它删除了我所有的数据库,并且MYSQL在我重新启动机器后再次停止工作。 [ERROR]INNODB:试图打开以前打开的表空间。以前的表空间MYSQL/INNODB_INDEX_STATS在FILEPATH:.\MYSQL\INNODB_INDEX_STATS.IBD中使