使用Maven,缺少本机代码库安装Java ZeroMQ绑定(jzmq)

Jau*_*nty 9 java java-native-interface zeromq maven

我试图从Maven存储库(http://search.maven.org/#search|ga|1|a%3A%22jzmq%22)安装jzmq,即Java ZeroMQ绑定.当作为依赖项添加到我的pom.xml [1]时,Maven会按预期下载提供Java库的主jar.除了主库之外,jzmq还需要一个Maven似乎无法下载的本机代码库.在运行时,由于缺少本机代码库,Java库引发了异常.

存储库中提供了本机库,jzmq的pom.xml [2]文件似乎指定应下载本机库(libjzmq.so).如果我下载库并手动设置本机库位置一切正常,我会更喜欢,如果这可以通过Maven自动化.

我不确定为什么Maven没有下载和安装本机库,任何关于如何解决这个问题的建议或建议将不胜感激.

我正在使用OpenJDK和Apache Maven 3.0.4运行最新的Ubuntu版本

[0]当使用Maven提供的jzmq时引发的异常,没有关键的本机代码库.

Exception in thread "main" java.lang.UnsatisfiedLinkError: no jzmq in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1874)
    at java.lang.Runtime.loadLibrary0(Runtime.java:849)
    at java.lang.System.loadLibrary(System.java:1087)
    at org.zeromq.ZMQ.<clinit>(ZMQ.java:39)
Run Code Online (Sandbox Code Playgroud)

[1]我的pom.xml,其中jzmq被添加为依赖项

<dependency>
<GroupId>org.zeromq</groupId>
<artifactId>jzmq</artifactId>
version>2.2.2</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

[2] jzmq的pom.xml,其中引用了本机库

<profile>
<id>Linux</id>
<activation>
<property>
<name>os.name</name>
<value>Linux</value>
</property></activation>
<properties>
<native.os>${os.name}</native.os>
<native.path>src/.libs/libjzmq.so</native.path>
<!-- Use platform-specific path separators here: -->
<native.library-path>src/.libs/</native.library-path>
</properties>
</profile>
Run Code Online (Sandbox Code Playgroud)

She*_*ang 5

您需要告诉Java在哪里可以找到本机库.

java -Djava.library.path=/usr/local/lib xxxxx 
Run Code Online (Sandbox Code Playgroud)

要运行jzmq,你需要两件事,

  1. /usr/local/share/java/zmq.jar
  2. 本机库,(libjzmq.dylib或libjzmq.dll或libjzmq.so)

有关详细信息,请参阅http://zeromq.org/bindings:java

为避免配置问题,我相信您可以检查如何嵌入本机库.当类"org.zeromq.ZMQ"初始化时,它将首先尝试加载嵌入式lib,

static {
       // if no embedded native library, revert to loading from java.library.path
    if (!EmbeddedLibraryTools.LOADED_EMBEDDED_LIBRARY)
        System.loadLibrary("jzmq");
}
Run Code Online (Sandbox Code Playgroud)