netty-transport-native-epoll获取失败的解决方法

问题现象描述

编译过程中出现缺失libnetty_transport_native_epoll_aarch_64.so的异常,提示“Could not find artifact io.netty:netty-transport-native-epoll:jar:linux-aarch_64:4.1.43.Final...”。

关键过程、根本原因分析

Spring Cloud中的一些组件,如spring-cloud-gateway,spring-cloud-gcp,spring-cloud-contract等在编译过程中会拉取netty-transport-native-epoll-4.1.43.Final-linux-x86_64.jar包,主流的maven仓库目前都没有ARM 64架构版本的Jar包,因此可能会出现缺失libnetty_transport_native_epoll_aarch_64.so的异常。

结论、解决方案及效果

将ARM64架构版本的netty-transport-native-epoll-4.1.43.Final-linux-aarch_64.jar包放入maven本地仓库。

  1. 创建库目录“/root/.m2/repository/io/netty/netty-transport-native-epoll/4.1.43.Final”(如果没有该目录)。

    mkdir -p /root/.m2/repository/io/netty/netty-transport-native-epoll/4.1.43.Final

  2. 获取netty-transport-native-epoll-4.1.43.Final-linux-aarch_64.jar包。

    也可参考《netty-transport-native-epoll-4.1.43.Final-linux-aarch_64.jar移植指南》自行编译获取Jar包。

    wget https://mirrors.huaweicloud.com/kunpeng/maven/io/netty/netty-transport-native-epoll/4.1.43.Final/netty-transport-native-epoll-4.1.43.Final-linux-aarch_64.jar --no-check-certificate

  3. 将JAR包放入maven本地仓库。

    \cp netty-transport-native-epoll-4.1.43.Final-linux-aarch_64.jar /root/.m2/repository/io/netty/netty-transport-native-epoll/4.1.43.Final

  4. 增加对netty-transport-native-epoll-4.1.43.Final-linux-aarch_64.jar包的依赖。

    1. 打开pom.xml文件。
      vim pom.xml
    2. “i”进入编辑模式,在<dependencies>后添加如下代码。
      <dependency>
          <groupId>io.netty</groupId>
          <artifactId>netty-transport-native-epoll</artifactId>
          <version>4.1.43.Final</version>
          <classifier>linux-aarch_64</classifier>
          <scope>compile</scope>
          <exclusions>
              <exclusion>
                      <artifactId>commons-logging</artifactId>
                      <groupId>commons-logging</groupId>
              </exclusion>
          </exclusions>
      </dependency>

  5. “Esc”键,输入:wq!,按“Enter”保存并退出编辑。
  6. 重新编译Spring Cloud。