Ubuntu 14.04 Jamod 串行上的 java.lang.UnsatisfiedLinkError : no rxtxSerial in java. library.path

标签 java maven ubuntu-14.04 modbus rxtx

我正在尝试使用 Jamod 串行主代码与 COM1 端口中连接的设备建立连接。以下是我的代码:

SerialConnection connection = null;
public void connection() {
    ModbusCoupler.getReference().setUnitID(1);
    SerialParameters params = new SerialParameters();
    params.setPortName("COM1");
    params.setBaudRate(9600);
    params.setDatabits(8);
    params.setParity("None");
    params.setEncoding(Modbus.SERIAL_ENCODING_ASCII);
    params.setEcho(false);
    params.setStopbits(1);

    try {
        connection = new SerialConnection(params);
        connection.open();
        connection.close(); 
    } catch (Exception e) {
        e.printStackTrace();
    }
}

我正在使用 Maven 并在 Ubuntu 14.04 上运行此代码。我关注了这个link在 Ubuntu 14.04 中安装 RXTX。我复制了librxtxSerial.so/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/RXTXcomm.jar/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/ext .

以下是我的maven代码:

    <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <camel.version>2.12.1</camel.version>
    <github.global.server>github</github.global.server> 
    <camel-version>2.16.2</camel-version>
    <junit-version>4.11</junit-version>
    <log4j-version>1.2.17</log4j-version>
    <slf4j-version>1.7.12</slf4j-version>
    <jackson-version>2.6.3</jackson-version>
    <build.serial.gnu>true</build.serial.gnu>
</properties>

<dependencies>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.6.4</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-core</artifactId>
        <version>${camel.version}</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.servicemix.bundles</groupId>
        <artifactId>org.apache.servicemix.bundles.jamod</artifactId>
        <version>1.2_1</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>${junit-version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.0.2</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-test</artifactId>
        <version>${camel.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <version>1.8.5</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>net.wimpi</groupId>
        <artifactId>jamod</artifactId>
        <version>1.2</version>
    </dependency>
    <!-- http://mvnrepository.com/artifact/org.rxtx/rxtx -->
    <dependency>
        <groupId>org.rxtx</groupId>
        <artifactId>rxtx</artifactId>
        <version>2.1.7</version>
    </dependency>
</dependencies>

<repositories>
    <repository>
        <id>apache.snapshots</id>
        <name>Apache Snapshots Maven Repository</name>
        <url>http://repository.apache.org/snapshots</url>
        <releases>
            <enabled>false</enabled>
        </releases>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
    <repository>
        <id>zodiac-repository</id>
        <name>Zodiac Milestone Repository</name>
        <url>http://zodiac.springsource.com/maven/bundles/milestone</url>
    </repository>
    <repository>
        <id>com.springsource.repository.bundle.external</id>
        <name>SpringSource Enterprise Bundle Repository - External Bundle Releases</name>
        <url>http://repository.springsource.com/maven/bundles/external</url>
    </repository>
</repositories>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.12.1</version>
            <configuration>
                <systemPropertyVariables>
                    <net.wimpi.modbus.debug>true</net.wimpi.modbus.debug>
                    <argLine>-Djava.library.path=/usr/share/java</argLine>
                </systemPropertyVariables>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>cobertura-maven-plugin</artifactId>
            <version>2.5.1</version>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-site-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <reportPlugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-project-info-reports-plugin</artifactId>
                        <version>2.4</version>
                        <configuration>
                            <dependencyDetailsEnabled>false</dependencyDetailsEnabled>
                            <dependencyLocationsEnabled>false</dependencyLocationsEnabled>
                        </configuration>
                        <!-- simpler configuration without reportSets available for usual cases -->
                        <reports>
                            <report>dependencies</report>
                            <report>scm</report>
                            <report>index</report>
                        </reports>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-javadoc-plugin</artifactId>
                        <version>2.8</version>
                        <configuration>
                            <links>
                                <link>http://jamod.sourceforge.net/apidocs/</link>
                                <link>http://camel.apache.org/maven/current/camel-core/apidocs/</link>
                            </links>
                        </configuration>
                    </plugin>
                </reportPlugins>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <encoding>${project.build.sourceEncoding}</encoding>
                <source>1.5</source>
                <target>1.5</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>2.4.3</version>
            <configuration>
                <encoding>${project.build.sourceEncoding}</encoding>
            </configuration>
        </plugin>
    </plugins>
</build>
</profiles>

当我尝试执行代码时,出现以下错误:

    Caused by: java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)[:1.8.0_91]
    at java.lang.Runtime.loadLibrary0(Runtime.java:870)[:1.8.0_91]
    at java.lang.System.loadLibrary(System.java:1122)[:1.8.0_91]
    at gnu.io.CommPortIdentifier.<clinit>(CommPortIdentifier.java:83)
    at net.wimpi.modbus.net.SerialConnection.open(SerialConnection.java:87)
    at modbus.Serial.connection(SerialDataSource.java:43) //connection.open()
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)[:1.8.0_91]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)[:1.8.0_91]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.8.0_91]
    at java.lang.reflect.Method.invoke(Method.java:498)[:1.8.0_91]
    at org.apache.camel.component.bean.MethodInfo.invoke(MethodInfo.java:408)
    at org.apache.camel.component.bean.MethodInfo$1.doProceed(MethodInfo.java:279)
    at org.apache.camel.component.bean.MethodInfo$1.proceed(MethodInfo.java:252)

我尝试了 stackoverflow 上建议的其他解决方案,例如安装 librxtx-java但得到同样的错误。请帮我解决这个问题。

最佳答案

您能否使用以下 JVM 参数运行您的应用程序:

-Djava.library.path=/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/librxtxSerial.so

JVM 参数在 java 命令之后、应用程序主类或带有主类的 jar 之前传递。

关于Ubuntu 14.04 Jamod 串行上的 java.lang.UnsatisfiedLinkError : no rxtxSerial in java. library.path,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37535743/

相关文章:

php - vagrant : Failed to mount folders in Linux guest, "vboxsf"文件系统不可用?

docker - Python3 utf8 编解码器在 Docker ubuntu 中未按预期解码 :trusty

linux - Ubuntu始终在全屏上方

java - 获取 Java 运行时参数 --argumentName=argumentValue

maven - 使用 Maven 生成的带有依赖项和其他一些文件的 jar 创建一个 tar

java - org.quartz.CronExpression 类型没有可用的源代码;您是否忘记继承所需的模块?

java - Maven 找不到编译类型的依赖项

java - 随机 com.android.volley.NoConnection 错误,java.io.InterruptedIOException,statuscode=0

java - do while 循环在我不希望它循环时循环

java - 将结果集转换为字符串数组