programing

Spring Api-Gateway : (M1) java.lang.불만족스러운 링크 오류: netty_resolver_dns_native_macos_aarch_64 없음

javajsp 2023. 8. 2. 08:48

Spring Api-Gateway : (M1) java.lang.불만족스러운 링크 오류: netty_resolver_dns_native_macos_aarch_64 없음

이것이 M1 Mac에서만 발생한다는 것을 확실히 하기 위해, 인텔 버전은 이 문제가 없는 것 같습니다.

JDK 17

openjdk version "17.0.1" 2021-10-19
OpenJDK Runtime Environment Homebrew (build 17.0.1+1)
OpenJDK 64-Bit Server VM Homebrew (build 17.0.1+1, mixed mode, sharing)

# List of all JDK
Matching Java Virtual Machines (2):
    17.0.1 (arm64) "Homebrew" - "OpenJDK 17.0.1" /opt/homebrew/Cellar/openjdk/17.0.1_1/libexec/openjdk.jdk/Contents/Home
    16.0.2 (arm64) "Azul Systems, Inc." - "Zulu 16.32.15" /Users/xxxxxx/Library/Java/JavaVirtualMachines/azul-16.0.2/Contents/Home
/opt/homebrew/Cellar/openjdk/17.0.1_1/libexec/openjdk.jdk/Contents/Home

프로젝트 다이어그램

enter image description here

문제:

java.lang.UnsatisfiedLinkErrorAPI-Gateway를 통해 마이크로 서비스 중 하나에 액세스하려고 하면 예외가 발생합니다.예를들면,http://localhost:8082/API-USER/users/status/ok이 예외를 적용합니다.

return값이 올바르고 성가신 예외에도 불구하고 API-Gateway가 계속 실행됩니다.

Caused by: java.lang.UnsatisfiedLinkError: failed to load the required native library
    at io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider.ensureAvailability(MacOSDnsServerAddressStreamProvider.java:110) ~[netty-resolver-dns-classes-macos-4.1.75.Final.jar:4.1.75.Final]
Caused by: java.lang.UnsatisfiedLinkError: failed to load the required native library

    at io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider.<init>(MacOSDnsServerAddressStreamProvider.java:120) ~[netty-resolver-dns-classes-macos-4.1.75.Final.jar:4.1.75.Final]
    ... 202 common frames omitted
Caused by: java.lang.UnsatisfiedLinkError: could not load a native library: netty_resolver_dns_native_macos_aarch_64
    at io.netty.util.internal.NativeLibraryLoader.load(NativeLibraryLoader.java:224) ~[netty-common-4.1.75.Final.jar:4.1.75.Final]
    at io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider.loadNativeLibrary(MacOSDnsServerAddressStreamProvider.java:92) ~[netty-resolver-dns-classes-macos-4.1.75.Final.jar:4.1.75.Final]
    at io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider.<clinit>(MacOSDnsServerAddressStreamProvider.java:77) ~[netty-resolver-dns-classes-macos-4.1.75.Final.jar:4.1.75.Final]
    at java.base/java.lang.Class.forName0(Native Method) ~[na:na]
Caused by: java.lang.UnsatisfiedLinkError: could not load a native library: netty_resolver_dns_native_macos_aarch_64

    at java.base/java.lang.Class.forName(Class.java:467) ~[na:na]
    at io.netty.resolver.dns.DnsServerAddressStreamProviders$1.run(DnsServerAddressStreamProviders.java:50) ~[netty-resolver-dns-4.1.75.Final.jar:4.1.75.Final]
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:318) ~[na:na]
    at io.netty.resolver.dns.DnsServerAddressStreamProviders.<clinit>(DnsServerAddressStreamProviders.java:46) ~[netty-resolver-dns-4.1.75.Final.jar:4.1.75.Final]
    ... 196 common frames omitted
    Suppressed: java.lang.UnsatisfiedLinkError: could not load a native library: netty_resolver_dns_native_macos
        at io.netty.util.internal.NativeLibraryLoader.load(NativeLibraryLoader.java:224) ~[netty-common-4.1.75.Final.jar:4.1.75.Final]
        at io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider.loadNativeLibrary(MacOSDnsServerAddressStreamProvider.java:95) ~[netty-resolver-dns-classes-macos-4.1.75.Final.jar:4.1.75.Final]
        ... 202 common frames omitted
    Caused by: java.io.FileNotFoundException: META-INF/native/libnetty_resolver_dns_native_macos.jnilib
        at io.netty.util.internal.NativeLibraryLoader.load(NativeLibraryLoader.java:166)
    Caused by: java.io.FileNotFoundException: META-INF/native/libnetty_resolver_dns_native_macos.jnilib

        ... 203 common frames omitted
        Suppressed: java.lang.UnsatisfiedLinkError: no netty_resolver_dns_native_macos in java.library.path: /Users/erichuang/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.
            at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2429)
            at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:818)
            at java.base/java.lang.System.loadLibrary(System.java:1989)
            at io.netty.util.internal.NativeLibraryUtil.loadLibrary(NativeLibraryUtil.java:38)
            at io.netty.util.internal.NativeLibraryLoader.loadLibrary(NativeLibraryLoader.java:376)
            at io.netty.util.internal.NativeLibraryLoader.load(NativeLibraryLoader.java:146)
            ... 203 common frames omitted
            Suppressed: java.lang.UnsatisfiedLinkError: no netty_resolver_dns_native_macos in java.library.path: /Users/erichuang/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.
                at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2429)
                at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:818)
                at java.base/java.lang.System.loadLibrary(System.java:1989)
                at io.netty.util.internal.NativeLibraryUtil.loadLibrary(NativeLibraryUtil.java:38)
                at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
                at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                at java.base/java.lang.reflect.Method.invoke(Method.java:568)
                at io.netty.util.internal.NativeLibraryLoader$1.run(NativeLibraryLoader.java:410)
                at java.base/java.security.AccessController.doPrivileged(AccessController.java:318)
                at io.netty.util.internal.NativeLibraryLoader.loadLibraryByHelper(NativeLibraryLoader.java:402)
                at io.netty.util.internal.NativeLibraryLoader.loadLibrary(NativeLibraryLoader.java:368)
                ... 204 common frames omitted
Caused by: java.io.FileNotFoundException: META-INF/native/libnetty_resolver_dns_native_macos_aarch_64.jnilib
    at io.netty.util.internal.NativeLibraryLoader.load(NativeLibraryLoader.java:166) ~[netty-common-4.1.75.Final.jar:4.1.75.Final]
    ... 203 common frames omitted
    Suppressed: java.lang.UnsatisfiedLinkError: no netty_resolver_dns_native_macos_aarch_64 in java.library.path: /Users/erichuang/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.
        at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2429) ~[na:na]
Caused by: java.io.FileNotFoundException: META-INF/native/libnetty_resolver_dns_native_macos_aarch_64.jnilib

        at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:818) ~[na:na]
        at java.base/java.lang.System.loadLibrary(System.java:1989) ~[na:na]
        at io.netty.util.internal.NativeLibraryUtil.loadLibrary(NativeLibraryUtil.java:38) ~[netty-common-4.1.75.Final.jar:4.1.75.Final]
        at io.netty.util.internal.NativeLibraryLoader.loadLibrary(NativeLibraryLoader.java:376) ~[netty-common-4.1.75.Final.jar:4.1.75.Final]
        at io.netty.util.internal.NativeLibraryLoader.load(NativeLibraryLoader.java:146) ~[netty-common-4.1.75.Final.jar:4.1.75.Final]
        ... 203 common frames omitted
        Suppressed: java.lang.UnsatisfiedLinkError: no netty_resolver_dns_native_macos_aarch_64 in java.library.path: /Users/erichuang/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.
            at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2429)
            at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:818)
            at java.base/java.lang.System.loadLibrary(System.java:1989)
            at io.netty.util.internal.NativeLibraryUtil.loadLibrary(NativeLibraryUtil.java:38)
            at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
            at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.base/java.lang.reflect.Method.invoke(Method.java:568)
            at io.netty.util.internal.NativeLibraryLoader$1.run(NativeLibraryLoader.java:410)
            at java.base/java.security.AccessController.doPrivileged(AccessController.java:318)
            at io.netty.util.internal.NativeLibraryLoader.loadLibraryByHelper(NativeLibraryLoader.java:402)
            at io.netty.util.internal.NativeLibraryLoader.loadLibrary(NativeLibraryLoader.java:368)
            ... 204 common frames omitted

질문.

이 오류를 완화하는 방법을 아는 사람이 있습니까?

피곤했어요...

이 두 링크 모두 추가할 것을 제안했습니다.netty-tcnative-boringssl-static의존성이지만 그것도 잘 작동하지 않았습니다.

API-게이트웨이:build.gradle

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-actuator'
    implementation 'org.springframework.cloud:spring-cloud-starter-gateway'
    implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'

    // https://mvnrepository.com/artifact/io.netty/netty-tcnative-boringssl-static
    implementation group: 'io.netty', name: 'netty-tcnative-boringssl-static', version: '2.0.51.Final'


}

Thanks for helping

GitHub에서 문제 발견: https://github.com/netty/netty/issues/11020

최신 버전: https://mvnrepository.com/artifact/io.netty/netty-resolver-dns-native-macos

여전히 이 문제가 발생하는 이유는 설명되지 않지만, 여기 문제를 해결한 것이 있습니다.

메이븐

        <dependency>
          <groupId>io.netty</groupId>
          <artifactId>netty-resolver-dns-native-macos</artifactId>
          <version>XXX</version>
          <classifier>osx-aarch_64</classifier>
        </dependency>

그라들

implementation group: 'io.netty', name: 'netty-resolver-dns-native-macos', version: 'xxx', classifier: 'osx-aarch_64'

netty-resolver-dns-native-macos 아티팩트에 적절한 분류기를 추가하여 네이티브 라이브러리의 적절한 버전을 로드해야 합니다.

implementation("io.netty:netty-resolver-dns-native-macos:4.1.75.Final") {
    artifact {
        classifier = "osx-aarch_64"
    }
}

Apple M1 Pro 칩이 있는 Macbook Pro의 경우:

# Groovy
runtimeOnly 'io.netty:netty-resolver-dns-native-macos:4.1.80.Final:osx-aarch_64'
# Kotlin
runtimeOnly("io.netty:netty-resolver-dns-native-macos:4.1.80.Final:osx-aarch_64")
# Maven
<dependency>
    <groupId>io.netty</groupId>
    <artifactId>netty-resolver-dns-native-macos</artifactId>
    <version>4.1.80.Final</version>
    <classifier>osx-aarch_64</classifier>
    <scope>runtime</scope>
</dependency>

mvnrepository.com 에서 netty-transver-transver-native-native-transfer의 최신 버전을 확인하십시오.

Maven의 해결 방법은 다음과 같습니다.

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-webflux</artifactId>
        <exclusions>
            <exclusion>
                <groupId>io.netty</groupId>
                <artifactId>netty-resolver-dns-native-macos</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>io.netty</groupId>
        <artifactId>netty-resolver-dns-native-macos</artifactId>
        <version>4.1.73.Final</version>
        <classifier>osx-aarch_64</classifier>
    </dependency>

먼저 참조된 라이브러리를 제외합니다.그런 다음 분류기를 사용하여 명시적으로 추가합니다.M2 칩 MacBook Pro 2022에서 작업했습니다.

편집됨

위의 솔루션을 사용해보고 나를 위해 작동하지 않는 멍청한 긴 솔루션으로 해결한 후, org.apache.tomcat.embed:tomcat-embed-core를 도입한 과도 종속성 때문에 서버가 Tomcat으로 시작한다는 것을 깨달았습니다.종속성을 포함하여 이 문제를 해결한 후:

<dependency>
    <groupId>io.netty</groupId>
    <artifactId>netty-resolver-dns-native-macos</artifactId>
    <classifier>osx-aarch_64</classifier>
</dependency>

효과가 있습니다.예외를 보는 다른 사용자를 위해 이 게시물을 삭제하지는 않지만, 해당 사용자의 서버가 Tomcat으로 시작하는 것을 보지는 않습니다.

저는 수락된 답변과 같이 의존성을 추가하는 것만으로는 충분하지 않았습니다.Spring Boot를 사용하고 있는데 아직도 분실에 대한 불만이 있습니다.

Caused by: java.io.FileNotFoundException: META INF/native/libnetty_resolver_dns_native_macos_aarch_64.jnilib

나는 복사할 필요가 있었습니다.

/target/asr-reactive-example-1.0-SNAPSHOT.jar/BOOT-INF/classes/netty-resolver-dns-native-macos-4.1.75.Final-osx-aarch_64.jar/META-INF/native

폴더, 대상:

/target/asr-reactive-example-1.0-SNAPSHOT.jar/META-INF

다음 파일이 포함되어 있습니다.libnetty_resolver_dns_native_macos_aarch_64.jnilib

확실히 메이븐으로 자동화할 수 있지만, 이게 해결책인지 모르겠습니다.

편집:

승인된 답변이 다른 사용자에게 적용되는 이유는 모르겠지만 시작할 때 해당 오류를 보는 것이 정말 짜증이 났고 MacOSDNSServerAddressStreamProvider 또는 오류를 기록하는 사용자에 대한 로깅을 비활성화하고 싶지 않았습니다.

후 netty와 jdk를 했습니다.System.loadLibrary():

시스템과 함께 로드

검색 대상:

시스템 검색

그리고:

사용자 검색

물론 그것은 그곳에 없습니다.그런 다음 클래스 경로에서 검색을 시도하지만 실패합니다.

클래스 경로1

클래스 경로2

를 이브러를복후로 META-INF/native그런 다음 시스템/사용자 위치에서 실패한 후 클래스 경로를 사용하여 라이브러리를 찾습니다.그런 다음 라이브러리를 작업 디렉토리의 루트에 복사하고 최종적으로 성공합니다.System.loadLibrary()에서 수 있습니다.:"에서 찾을 수 있습니다.

기성품의

이제 파일 자동 복사를 위해 몇 가지 곡예를 만들었습니다.

일부 버전 설정:

<properties>
    <netty.dns.native.resolver.version>4.1.79.Final</netty.dns.native.resolver.version>
</properties>

그런 다음 종속성을 포함합니다.

<dependency>
    <groupId>io.netty</groupId>
    <artifactId>netty-resolver-dns-native-macos</artifactId>
    <version>${netty.dns.native.resolver.version}</version>
    <classifier>osx-aarch_64</classifier>
</dependency>

그런 다음 기본 라이브러리를 복사합니다.

<plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-dependency-plugin</artifactId>
      <version>3.3.0</version>
      <executions>
      <execution>
            <id>unpack</id>
            <phase>generate-sources</phase>
            <goals>
                  <goal>unpack</goal>
            </goals>
            <configuration>
                  <skip>${skip.aarch64.copy}</skip>
                  <artifactItems>
                  <artifactItem>
                        <groupId>io.netty</groupId>
                        <artifactId>netty-resolver-dns-native-macos</artifactId>
                        <version>${netty.dns.native.resolver.version}</version>
                        <type>jar</type>
                        <classifier>osx-aarch_64</classifier>
                        <overWrite>false</overWrite>
                        <includes>**/native/*.jnilib</includes>
                  </artifactItem>
                  </artifactItems>
                  <outputDirectory>${project.build.directory}/classes</outputDirectory>
                  <overWriteReleases>true</overWriteReleases>
                  <overWriteSnapshots>true</overWriteSnapshots>
                  <overWriteIfNewer>true</overWriteIfNewer>
            </configuration>
      </execution>
      </executions>
</plugin>

됩니다(""OS 64" ).<skip>${skip.aarch64.copy}</skip>):

<plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-antrun-plugin</artifactId>
      <version>1.8</version>
      <executions>
            <execution>
                  <phase>validate</phase>
                  <goals>
                  <goal>run</goal>
                  </goals>
                  <configuration>
                  <exportAntProperties>true</exportAntProperties>
                  <target>
                        <condition property="skip.aarch64.copy" value="true" else="false">
                              <not>
                              <equals arg1="${os.detected.arch}" arg2="aarch_64"/>
                              </not>
                        </condition>
                        <echo message="Skip AARCH-64: ${skip.aarch64.copy}"/>
                  </target>
                  </configuration>
            </execution>
      </executions>
</plugin>

그리고 위의 "os.vmdk.arch" 속성에 대해 사용했습니다.

<build>
      <extensions>
          <extension>
              <groupId>kr.motd.maven</groupId>
              <artifactId>os-maven-plugin</artifactId>
              <version>1.7.0</version>
          </extension>
      </extensions>
......
</build>

알아요. 모든 복잡한 해결책을 보세요.다른 해결책이 있으신 분은 여기에 올려주시기 바랍니다.

언급URL : https://stackoverflow.com/questions/71966221/spring-api-gateway-m1-java-lang-unsatisfiedlinkerror-no-netty-resolver-dns-n