我正在使用here中的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库是我必须通过发行版的程序包管理器插入的答案?是emerge
,apt-get
还是任何一个。
似乎某些基础代码正在使用Java本机接口(JNI),并且需要加载Unix共享库。
这通常是通过在启动JVM时将.so文件添加到库路径中来实现的。
导出LD_LIBRARY_PATH = $ LD_LIBRARY_PATH:/ path / to / the /目录/包含/ so
这也可以通过-Djava.library.path JVM args添加库来实现。
找到的this DBus service page可能不相关,但是提到了您要使用的同一本机库:
要获得dbus的支持,您需要在系统上安装jni / unix-java.so(Debian:libunixsocket-java ArchLinux:libmatthew-unix-java(AUR)。
[它提到unix-java.so
作为本机库,您要尝试加载的库,因此,如果您使用的是Debian / Ubuntu,请尝试做:
apt install libunixsocket-java