如何在OSX的Java中获得Kqueue?

发布于 2025-02-11 05:49:05 字数 2151 浏览 1 评论 0原文

我的软件包如下:

    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显示包装正确安装正确:(whene < source>是我们内部库存储的路径)

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).

Gradle输出显示系统:

------------------------------------------------------------------------
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

我可以重现的最简单方法是:

KQueue.isAvailable()

< strong>返回false。

如果我运行以下内容以获取更多信息:

KQueue.unavailabilityCause().printStackTrace();

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

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 -Info -refresh依赖性

My packages are as following:

    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 showing the package getting installed correctly: (where <source> is the path to our internal library storage)

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).

Gradle output showing the system:

------------------------------------------------------------------------
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

Simplest way I can reproduce is:

KQueue.isAvailable()

returns false.

If I run the following to get more information:

KQueue.unavailabilityCause().printStackTrace();

I get: (removed repeating or unnecessary stack traces)

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:.
        ...

Am I not supposed to be able to run this code? What am I missing?

If I search online for the error, it shows outdated Netty package loading errors (only showing up in debug level logging). This is NOT my problem. The package loads correctly when I run gradle and I can see it is being cached/loaded with gradle -info --refresh-dependencies.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

烟沫凡尘 2025-02-18 05:49:05

这是由于导入netty-all的依赖项之一。这导致Kqueue软件包被两次进口,并且具有不同的版本。

问题在于我没有完全读取堆栈跟踪:

KQueue.unavailabilityCause().printStackTrace();

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

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也有问题,因此想提及)

It was due to one of the dependencies importing netty-all. This was causing the Kqueue packages to be imported twice and with different versions.

The problem was that I did not fully read the stack trace from:

KQueue.unavailabilityCause().printStackTrace();

In the end of that stack trace, it said:

Caused by: java.lang.IllegalStateException: Multiple resources found for 'META-INF/native/libnetty_transport_native_kqueue_x86_64.jnilib' with different content:
...

After that, I was able to find where the package was coming from and fix it. Then I was able to locally run the Java Code to run domain socket and test it locally.

I used IntelliJ to run it after the fix. (VsCode had a problem even after the fix, hence wanted to mention it)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文