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
프로젝트 다이어그램
문제:
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
질문.
이 오류를 완화하는 방법을 아는 사람이 있습니까?
피곤했어요...
- https://github.com/netty/netty-tcnative/issues/576
- https://github.com/netty/netty-tcnative/issues/343
이 두 링크 모두 추가할 것을 제안했습니다.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():
검색 대상:
그리고:
물론 그것은 그곳에 없습니다.그런 다음 클래스 경로에서 검색을 시도하지만 실패합니다.
를 이브러를복후로 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
'programing' 카테고리의 다른 글
| JavaScript 또는 jQuery를 사용하여 Mac OS X 또는 Windows 컴퓨터를 검색하는 가장 좋은 방법 (0) | 2023.08.02 |
|---|---|
| 선택하지 않도록 jQuery의 라디오 버튼을 재설정하는 방법 (0) | 2023.08.02 |
| Android MVVM View 모델에서 컨텍스트를 가져오는 방법 (0) | 2023.08.02 |
| 배열에서 중복 항목의 발생을 계산하는 방법 (0) | 2023.08.02 |
| 물살이.NET SDK는 대상을 지원하지 않습니다.NET Core 3.0 | 3.1 | 5.0 | 6.0 (0) | 2023.08.02 |
