Как сделать ссылку на unix-java из Java в 2019 году

Я использую код 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 или любой другой.


person Michael restore Monica Cellio    schedule 19.11.2019    source источник
comment
сначала проверьте область зависимости, затем проверьте, существует ли она в .m2. Если не загрузить ту же версию и вставить с относительным путем.   -  person emotionlessbananas    schedule 19.11.2019
comment
Та же версия чего?   -  person Michael restore Monica Cellio    schedule 19.11.2019


Ответы (4)


Нашел эту страницу службы DBus, которая может быть не связана, но упоминает одно и то же родная библиотека, которую вы пытаетесь использовать:

Для поддержки dbus в вашей системе должен быть установлен jni/unix-java.so (Debian: libunixsocket-java ArchLinux: libmatthew-unix-java (AUR)).

В нем упоминается unix-java.so как нативная библиотека, та самая, которую вы пытаетесь загрузить, поэтому, если вы используете Debian/Ubuntu, попробуйте сделать:

apt install libunixsocket-java
person prunge    schedule 19.11.2019
comment
Также только что заметил, что на странице есть libmatthew-unix-java для Arch, и, учитывая, что в вашей трассировке стека есть упоминание о cx.ath.matthew.unix.UnixSocket, вполне вероятно, что это одно и то же. - person prunge; 19.11.2019
comment
как это установить на мак? - person timaschew; 12.02.2020

Похоже, что какой-то базовый код использует собственный интерфейс Java (JNI) и требует загрузки общего объекта unix.

Обычно это достигается путем добавления файла .so в путь к библиотеке при запуске JVM.

экспорт LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/путь/к/каталогу/содержащему/так

Этого также можно добиться, добавив библиотеку с помощью аргументов JVM -Djava.library.path.

person AskAshoke    schedule 19.11.2019

Спасибо всем за их предложения. В итоге я использовал этот материал DBus с этот материал NetworkManager. Очевидно, мне пришлось изменить множество имен пакетов import в kk-dbus-nm-java, но преимущество в том, что для DBus от hypfvieh не нужна отдельная библиотека сокетов.

person Michael restore Monica Cellio    schedule 20.11.2019

Я сделал следующее для другого проекта DBus, у которого были аналогичные требования. Этот проект имел следующие зависимости:

  1. libdbus-java-2.7.jar (проект уже содержал эту банку)
  2. /usr/share/java/unix.jar (удовлетворился установкой пакета debian и добавлением jar из него)
  3. /usr/share/java/hexdump.jar (удовлетворено через maven)

Я выполнил следующее в оболочке Linux.

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.

Наконец: нажмите бег.

person sunnyboy    schedule 08.12.2020