Java RXTXcomm Lib не загружается или не может быть найден - PullRequest
0 голосов
/ 08 октября 2018

Я хочу провести небольшой тест с устройством USB nanoCUL868, чтобы передать некоторый сигнал на удаленные устройства.Флешка работает с некоторым сторонним программным обеспечением, и я смог связаться с удаленным устройством.Теперь я хочу протестировать эту флешку с помощью следующего кода в JAVA:

package de.saltest.home;

import java.io.IOException;
import java.io.OutputStream;
import java.util.logging.Logger;

import org.openmuc.jrxtx.Parity;
import org.openmuc.jrxtx.SerialPort;
import org.openmuc.jrxtx.SerialPortBuilder;

public class SomfyCULTest {

    private static final Logger log = Logger.getLogger(SomfyCULTest.class.getName());

    public static void main(String[] args) throws IOException {
        log.info("Opening port ttyUSB0");
        SerialPort port = SerialPortBuilder.newBuilder("/dev/ttyAMA0").setBaudRate(9600).setParity(Parity.NONE).build();
        OutputStream out = port.getOutputStream();

        String commandLEDOn = "l01\n";
        String commandLEDOff = "l00\n";

        String encryptionKey = "A1";
        // C - Command (1 = My, 2 = Up, 4 = Down, 8 = Prog)
        String command = "2";
        String rollingCode = "001D";
        String address = "000029";
        String somfyCommand = "Ys" + encryptionKey + command + "0" + rollingCode + address + "\n";
        out.write(somfyCommand.getBytes());
        out.close();
        port.close();

        log.info("Closed port");
    }

}

Я установил Oracle Java на Rasperry Pi 3, а также получил librtrx-java через apt-get.A dpkg-query -L librxtx-java дает:

/usr/lib/jni/librxtxRS485.so
/usr/lib/jni/librxtxRaw.so
/usr/lib/jni/librxtxI2C.so
/usr/lib/jni/librxtxParallel.so
/usr/lib/jni/librxtxSerial.so
/usr/share/java/RXTXcomm.jar

Итак, я предполагаю, что эти библиотеки правильно установлены для правильной платформы.Если я использую javac для компиляции своего кода:

, я получаю следующее сообщение об ошибке:

javac -classpath /usr/lib/jni -cp /usr/share/java/RXTXcomm.jar:. src/main/java/de/saltest/home/SomfyCULTest.java
src/main/java/de/saltest/home/SomfyCULTest.java:7: error: package org.openmuc.jrxtx does not exist
import org.openmuc.jrxtx.Parity;
                        ^

У меня также есть проект maven, который прекрасно компилируется с использованием этого кода, однако я не могу его выполнитьиз-за следующей ошибки:

 mvn exec:java -Dexec.mainClass=de.saltest.home.SomfyCULTest

[INFO] --- exec-maven-plugin:1.6.0:java (default-cli) @ serialTest ---
Okt 07, 2018 3:25:41 PM de.saltest.home.SomfyCULTest main
INFORMATION: Opening port ttyUSB0
Could not load lib from jar and from system.
gnu.io.LibLoadException: directory does not exist /libs
        at gnu.io.LibraryLoader.loadLib(LibraryLoader.java:65)
        at gnu.io.LibraryLoader.loadLibsFromJar(LibraryLoader.java:48)
        at gnu.io.LibraryLoader.loadRxtxNative(LibraryLoader.java:29)
        at gnu.io.RXTXCommDriver.<clinit>(RXTXCommDriver.java:85)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:264)
        at gnu.io.CommPortIdentifier.<clinit>(CommPortIdentifier.java:104)
        at org.openmuc.jrxtx.JRxTxPort.openSerialPort(JRxTxPort.java:50)
        at org.openmuc.jrxtx.SerialPortBuilder.build(SerialPortBuilder.java:166)
        at de.saltest.home.SomfyCULTest.main(SomfyCULTest.java:24)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:282)
        at java.lang.Thread.run(Thread.java:748)
java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path thrown while loading gnu.io.RXTXCommDriver

Отсюда я потерялся.Я пробовал много вещей, таких как копирование библиотек в разные места, как предложено в некоторых других публикациях.Я также изменил путь к классам и многое другое, о чем мог подумать.Тем не менее, кажется, ничего не работает.Единственное, что я нахожу странным, это то, что я пытаюсь использовать java.io.но код пытается загрузить gnu.io.Может быть, есть какое-то несоответствие?Любая помощь или решение действительно приветствуется.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

То, что кажется решением, - это добавить плагин к сборке maven, который создает JAR со всеми включенными зависимостями.Как описано здесь: https://www.mkyong.com/maven/create-a-fat-jar-file-maven-assembly-plugin/ Однако, что еще странно, вы должны добавить путь к библиотеке, как указано выше:

-Djava.library.path=/usr/lib/jni

Для моего понимания это не должно быть необходимымбольше.Тем не менее без пути это не работает.

0 голосов
/ 09 октября 2018

Вы пытались добавить собственный путь к библиотеке в качестве параметра запуска:

-Djava.library.path=/usr/lib/jni
...