如何在2019年从Java链接到“ unix-java”

时间:2019-11-19 05:46:17

标签: java dbus networkmanager

我正在使用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库是我必须通过发行版的程序包管理器插入的答案?是emergeapt-get还是任何一个。

4 个答案:

答案 0 :(得分:0)

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

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

export LD_LIBRARY_PATH = $ LD_LIBRARY_PATH:/ path / to / the /目录/包含/ so

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

答案 1 :(得分:0)

找到了Documentation,这可能无关,但提到了您要使用的同一本机库:

  

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

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

apt install libunixsocket-java

答案 2 :(得分:0)

感谢大家的建议。我最终要做的是将this DBus东西和this NetworkManager东西一起使用。显然,我不得不在 kk-dbus-nm-java 中更改许多import软件包名称,但好处是hypfvieh的DBus东西不需要单独的套接字库。

答案 3 :(得分: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中。 然后在“ Java BuildPath-> Libraries-> unix.jar->本地库位置”中添加/usr/lib/jni路径

最后:点击运行。