java - 如何使用 OSGi Equinox 设置 rxtx?

标签 java osgi bundle rxtx

我正在寻找问题的解决方案。
我正在开发一个必须通过 rxtx jar 从串行端口读取的包。
当我启动应用程序时,出现以下错误

java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path thrown while loading gnu.io.RXTXCommDriver
Exception in thread "Thread-2" java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path
    at java.lang.ClassLoader.loadLibrary(Unknown Source)
    at java.lang.Runtime.loadLibrary0(Unknown Source)
    at java.lang.System.loadLibrary(Unknown Source)
    at gnu.io.CommPortIdentifier.<clinit>(CommPortIdentifier.java:123)
    at ez430.Port.<init>(Port.java:29)

我已将 jar 添加到构建路径并将其设置在 JVM 中。

请帮助我!!

最佳答案

由于 OSGi 是多平台的,并且需要处理 bundle 的出现和消失,因此需要为 bundle 显式指定 native 库的处理(如 rxtx 那样)。这是通过使用包含 rxtx jar 文件的 bundle 中的 Bundle-NativeCode header 来完成的。可以根据操作系统和架构指示要加载的 native 库。在这种情况下,它可能看起来像:

Bundle-NativeCode: lib/Linux/x86_64-unknown-linux-gnu/librxtxSerial.so; 
  osname="Linux";processor="x86-64",
  lib/Windows/i368-mingw32/rxtxSerial.dll;
  osname="Windows"

上面的示例表明,对于 Linux x86-64,该库可以在 lib/Linux/x86_64-unknown-linux-gnu/librxtxSerial.so 中找到,对于 Windows(所有体系结构),可以在 lib/Windows/i368-mingw32/rxtxSerial.dll 中找到。路径在 bundle 中是相对的,因此不要忘记在 bundle 中包含共享库。

有关更多详细信息,请查看 OSGi core规范。

关于java - 如何使用 OSGi Equinox 设置 rxtx?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26739459/

相关文章:

java - 可调用和泛型的集合

java - 如何将 FastInfoset 与 JAXWS 一起使用?

Java Swing 问题

java - 是否可以使用比 list 中指定的更新的 bundle 版本而不更改当前 bundle ?

osgi - OSGi 包更新如何工作?

Android 和 bundle

java - (已修复)如何在动态数组(文件、流、缓冲区)上查找一个字符串值?

java - OSGi Java Spark 不同模块中的多个端点声明?

android - 如果父 Activity 包始终具有传递给 Fragment 的对象,那么 Fragment 包的用途是什么?

java - 提交后 bundle 从片段中消失?