10

Maven リポジトリ ( http://search.maven.org/#search|ga|1|a%3A%22jzmq%22 )から Java ZeroMQ バインディングである jzmq をインストールしようとしています。依存関係として 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)

[1] jzmq が依存関係として追加されている私の pom.xml

<dependency>
<GroupId>org.zeromq</groupId>
<artifactId>jzmq</artifactId>
version>2.2.2</version>
</dependency>

[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>
4

2 に答える 2

5

ネイティブ ライブラリの場所を Java に伝える必要があります。

java -Djava.library.path=/usr/local/lib xxxxx 

jzmq を実行するには、次の 2 つが必要です。

  1. /usr/local/share/java/zmq.jar
  2. ネイティブ ライブラリ (libjzmq.dylib または libjzmq.dll または libjzmq.so)

詳細については、 http://zeromq.org/bindings:javaを参照してください。

設定の問題を回避するために、ネイティブ ライブラリの埋め込み方法を確認できると思います。クラス「org.zeromq.ZMQ」が自身を初期化するとき、最初に組み込みライブラリをロードしようとします。

static {
       // if no embedded native library, revert to loading from java.library.path
    if (!EmbeddedLibraryTools.LOADED_EMBEDDED_LIBRARY)
        System.loadLibrary("jzmq");
}
于 2014-01-08T03:49:44.067 に答える