ZeroMQのJavaバインディングの仲間のユーザーとして、私は同情します。ZeroMQは、間違いなく、管理が難しいJava依存関係の1つです。心の底から、ZeroMQはネイティブCコードであり、JavaバインディングはコアZeroMQライブラリへのJNIインターフェイスの(比較的)軽量なラッパーであり、これがデプロイが複雑な理由です。
余談ですが、ZeroMQがアプリケーションに適している場合は、これに似たものは実際にはないため、問題を解決する価値は十分にあります。残念ながら、これは、それが本当に必要なものであるかどうかを判断できるように、これらすべての手順を実行して機能させる必要があることを意味します。
ZeroMQ for Javaは、次の3つのコンポーネントに基づいています。
- libzmq-コアZeroMQライブラリ(DLL-Javaだけでなく、すべての言語に必要)
- jzmq-Javaバインディング(DLL)のネイティブ部分
- zeromq.jar-Javaバインディング(JAR)のJava部分
あるマシンで構築したjarは、別のシステムでも機能しますか?このアプリケーションをポータブルにする必要があります。
はい。瓶は持ち運び可能です。どのマシンでもビルドして、他のマシンにデプロイできます。しかし、それは簡単な部分です。難しいのは、必要なさまざまなDLLを作成することであり、それらは移植性がありません。Windows、Mac、FedoraLinuxをサポートしたいとします。Windows、Mac、Fedoraのネイティブ開発環境が必要であり、サポートするプラットフォームごとにDLLを構築します。
Linuxについて、あるディストリビューション(たとえばFedora)で構築されたDLLが別のディストリビューション(たとえばDebian)で実行されるかどうかを判断するのに十分な知識はありません。そうでない場合は、さらに作業が必要です。
とにかく、アプリケーションは移植可能です-ZeroMQとJZMQは膨大な数のプラットフォームで実行できます-しかし、各プラットフォームをインストールするときにjarと適切なDLLのセットが確実に配置されるように、展開プロセスを厳密に制御する必要がありますインストールされ、適切な場所にインストールされます。
なぜ何かをインストールする必要があるのですか?
技術的にはそうではありません。しかしmake install
、インクルードファイルとライブラリファイルがコンパイラーが期待する場所にあり、プログラムを実行するときにJavaがそれらをロードできるようにするために、この手順を実行することをお勧めします。
もしそうなら、なぜ私は最初に自分の瓶を作る必要があるのですか?
私はコミッターではないので、はっきりとは言えません。その一部は開発者の効率性だと思います。彼らは、自分でjarを作成できるユーザーのためにjarを作成するよりも、コードを改善したいと思っています。
さらに重要なのは、jarが十分ではなく、とにかくDLLをビルドする必要があるため、jarとDLLを一緒にビルドする方が理にかなっています。そうすれば、JNIラッパーには、Javaラッパークラスのネイティブ宣言と一致するようにCで実装された適切なネイティブメソッドがあることが確実になります。
幸運を。お役に立てれば。