1

我正在使用此处的 NetworkManager/DBus 代码。它构建成功,但在运行时会产生:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no unix-java in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
    at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2660)
    at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:829)
    at java.base/java.lang.System.loadLibrary(System.java:1870)
    at cx.ath.matthew.unix.UnixSocket.<clinit>(UnixSocket.java:40)
    at org.freedesktop.dbus.Transport.connect(Transport.java:772)
    at org.freedesktop.dbus.Transport.<init>(Transport.java:737)
    at org.freedesktop.dbus.DBusConnection.<init>(DBusConnection.java:299)
    at org.freedesktop.dbus.DBusConnection.getConnection(DBusConnection.java:282)

这是一个 Maven 项目。我可以通过引入另一个工件或声明来解决这个问题吗?我整天都在转圈看那些 10 多年前的东西,试图弄清楚我是否使用过时的代码,因为以前我一直在使用我自己的通过内省生成的类,但现在显然我需要这个额外的库.

或者这个 unix-java 库是我必须通过我的发行版的包管理器获取的答案?无论是它emergeapt-get还是任何一个。

4

4 回答 4

2

发现这个可能不相关的 DBus 服务页面,但提到了您尝试使用的同一个本机库:

对于 dbus 支持,您需要在系统上安装 jni/unix-java.so(Debian:libunixsocket-java ArchLinux:libmatthew-unix-java (AUR))。

它提到unix-java.so本机库,与您尝试加载的库相同,因此如果您使用的是 Debian/Ubuntu,请尝试执行以下操作:

apt install libunixsocket-java
于 2019-11-19T05:55:52.007 回答
0

看起来一些底层代码正在使用 java 本机接口 (JNI),并且需要加载 unix 共享对象。

这通常通过在启动 JVM 时将 .so 文件添加到库路径来实现。

导出 LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/the/directory/containing/so

这也可以通过 -Djava.library.path JVM args 添加库来实现。

于 2019-11-19T05:55:44.400 回答
0

感谢大家的建议。我最终所做的是将这个DBus 的东西与这个NetworkManager 的东西一起使用。显然我不得不更改kk-dbus-nm-javaimport中的很多包名称,但好处是 hypfvieh 的 DBus 东西不需​​要单独的套接字库。

于 2019-11-20T01:27:16.480 回答
0

我对具有类似要求的不同 DBus 项目执行了以下操作。该项目具有以下依赖项:

  1. libdbus-java-2.7.jar(项目已经包含了这个 jar)
  2. /usr/share/java/unix.jar(通过安装 debian 包并从中添加 jar 感到满意)
  3. /usr/share/java/hexdump.jar(通过maven满足)

我在 Linux shell 中执行了以下操作。

sudo apt install libunixsocket-java

我使用 Eclipse 来配置和运行这个项目,所以以下内容适用于 Eclipse。

我将项目转换为 Maven 项目。然后我添加了以下 maven 依赖项。

<!-- https://mvnrepository.com/artifact/org.abstractj.libmatthew/hexdump -->
<dependency>
    <groupId>org.abstractj.libmatthew</groupId>
    <artifactId>hexdump</artifactId>
    <version>0.2.1</version>
</dependency>

然后我包含/usr/share/java/unix.jar到 Java BuildPath->Libraries。然后/usr/lib/jni在“Java BuildPath->Libraries->unix.jar->Native Library Location”中包含路径

最后:点击运行。

于 2020-12-08T03:25:19.747 回答