首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使KQueue在OSX中在Java中可用?

如何使KQueue在OSX中在Java中可用?
EN

Stack Overflow用户
提问于 2022-06-28 04:24:18
回答 1查看 181关注 0票数 1

我的包裹如下:

代码语言:javascript
复制
    implementation("io.netty:netty-transport-native-epoll:$nettyVersion")
    implementation("io.netty:netty-transport-native-kqueue:$nettyVersion")
    implementation("io.netty:netty-transport-native-epoll:$nettyVersion:linux-aarch_64")
    implementation("io.netty:netty-transport-native-epoll:$nettyVersion:linux-x86_64")
    implementation("io.netty:netty-transport-native-kqueue:$nettyVersion:osx-x86_64")

显示正确安装包的Gradle:(其中<source>是我们内部库存储的路径)

代码语言:javascript
复制
Cached resource <source>/releases/io/netty/netty-transport-native-kqueue/4.1.78.Final/netty-transport-native-kqueue-4.1.78.Final-osx-x86_64.jar is up-to-date (lastModified: Fri Jun 24 17:45:28 PDT 2022).

显示系统的分级输出:

代码语言:javascript
复制
------------------------------------------------------------------------
Detecting the operating system and CPU architecture
------------------------------------------------------------------------
os.detected.name=osx
os.detected.arch=x86_64
os.detected.version=12.4
os.detected.version.major=12
os.detected.version.minor=4
os.detected.classifier=osx-x86_64

我能复制的最简单的方法是:

代码语言:javascript
复制
KQueue.isAvailable()

返回false.

如果我运行以下命令以获得更多信息:

代码语言:javascript
复制
KQueue.unavailabilityCause().printStackTrace();

我得到:(删除重复或不必要的堆栈跟踪)

代码语言:javascript
复制
java.lang.UnsatisfiedLinkError: could not load a native library: netty_transport_native_kqueue_x86_64
        at io.netty.util.internal.NativeLibraryLoader.load(NativeLibraryLoader.java:239)
        at io.netty.channel.kqueue.Native.loadNativeLibrary(Native.java:155)
        ...
        Suppressed: java.lang.UnsatisfiedLinkError: no netty_transport_native_kqueue_x86_64 in java.library.path: /Users/kdilsiz/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.
        ...

我不应该运行这段代码吗?我遗漏了什么?

如果我在线搜索错误,它将显示过时的Netty包加载错误(仅显示在调试级别日志记录中)。这不是我的问题。当我运行gradle时,包将正确加载,并且我可以看到它是用gradle -info --refresh-dependencies缓存/加载的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-05 21:33:12

这是由于导入netty-all的依赖项之一造成的。这导致两次以不同版本导入Kqueue包。

问题是,我没有从以下位置完全读取堆栈跟踪:

代码语言:javascript
复制
KQueue.unavailabilityCause().printStackTrace();

在堆栈跟踪的末尾,它说:

代码语言:javascript
复制
Caused by: java.lang.IllegalStateException: Multiple resources found for 'META-INF/native/libnetty_transport_native_kqueue_x86_64.jnilib' with different content:
...

在那之后,我找到了包的来源,并修复了它。然后,我能够在本地运行Java代码来运行域套接字并在本地测试它。

我使用IntelliJ在修复后运行它。(即使在修复之后,VsCode也有问题,因此想提一下)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72780736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档