作为ZeroMQ的Java绑定的同伴,我对此表示同情。ZeroMQ绝对是管理的更具挑战性的Java依赖项之一。在它的核心,ZeroMQ是原生的C代码,Java绑定是一个(相对)轻量级的包装器,围绕着JNI接口到核心ZeroMQ库,这就是为什么它部署起来很复杂。
顺便说一句 - 如果ZeroMQ非常适合您的应用程序,那么麻烦是值得的,因为真的没有什么比这更像它了。不幸的是,这意味着您需要完成所有这些步骤才能使其正常工作,以便您可以确定它是否是您真正需要的。
ZeroMQ for Java 基于三个组件:
- libzmq - 核心 ZeroMQ 库 (DLL - 任何语言都需要,而不仅仅是 Java)
- jzmq - Java 绑定 (DLL) 的本机部分
- zeromq.jar - Java绑定(JAR)的java部分
我在一台机器上构建的 jar 可以在另一台系统上工作吗?我需要这个应用程序是可移植的。
是的。罐子将是便携式的。您可以在任何计算机上构建它,并将其部署到任何其他计算机上。然而,这是容易的部分。困难的部分是创建所需的各种 DLL,这些 DLL 是不可移植的。假设你想支持Windows,Mac和Fedora Linux。您将需要在Windows,Mac和Fedora上使用本机开发环境,并为要支持的每个平台构建DLL。
我对Linux的了解还不够多,无法说明在一个发行版(比如 Fedora)上构建的 DLL 是否会在另一个发行版(比如 Debian)上运行。如果没有,那么您还有更多工作要做。
无论如何,您的应用程序将是可移植的 - ZeroMQ和JZMQ可以在大量平台上运行 - 但是您需要严格控制部署过程,以确保在安装每个平台时,安装了jar和适当的DLL集,并且它们安装在正确的位置。
为什么我需要安装任何东西?
从技术上讲,你没有。但我认为他们建议执行此步骤,以便包含文件和库文件位于编译器期望它们的位置,并且还使Java可以在运行程序时加载它们。make install
如果是这样,为什么我需要一开始就构建自己的罐子?
我不是提交者,所以我不能肯定地说。我预计其中一部分是开发人员的效率 - 他们宁愿改进代码,也不愿为可以自己创建jar的用户创建jar。
更重要的是 - 由于jar是不够的,无论如何你都必须构建DLL,所以一起构建jar和DLL更有意义。这样,您就可以确定 JNI 包装器具有在 C 语言中实现的完全正确的本机方法,以匹配 Java 包装器类中的本机声明。
祝你好运。希望这有帮助。