作为 ZeroMQ 的 Java 绑定的用户,我深有同感。管理 ZeroMQ 是比较具有挑战性的 Java 依赖之一。ZeroMQ 本质上是本地 C 代码,Java 绑定是一个相对轻量级的包装器,围绕着核心 ZeroMQ 库的 JNI 接口,这就是为什么它难以部署的原因。
另外,如果 ZeroMQ 很适合您的应用程序,那么克服这些问题值得,因为确实没有其他东西可以与之媲美。不幸的是,这意味着您需要经历所有这些步骤,使其工作,以便您可以决定是否真正需要它。
Java 的 ZeroMQ 基于三个组件:
- libzmq - 核心 ZeroMQ 库(DLL - 任何语言都需要,不仅限于 Java)
- jzmq - Java 绑定的本机部分 (DLL)
- zeromq.jar - Java 绑定的 Java 部分(JAR)
引用:
“我在一台机器上构建的 jar 文件能否在另一台上运行?我需要应用程序可移植。”
是的。jar 文件是可移植的。您可以在任何机器上构建它,并在任何其他机器上部署它。然而,那只是简单的部分。困难的部分是创建所需的各种 DLL 文件,而这些文件是不可移植的。假设您想支持 Windows、Mac 和 Fedora Linux。您需要在Windows、Mac 和 Fedora 上拥有本地开发环境,并为每个要支持的平台构建 DLL。
我不太了解 Linux,无法确定在一个(比如 Fedora)上构建的 DLL 是否会在另一个(比如 Debian)上运行。如果不行,那么您还有更多的工作要做。
总之,您的应用程序将是可移植的 - ZeroMQ 和 JZMQ 可以在大量平台上运行,但您需要严格控制部署过程,以确保当您安装每个平台时,jar 文件和适当的一组 DLL 文件被安装,并且它们被安装在正确的位置。
引用:
“为什么我需要安装任何东西?”
从技术上讲不需要,但我认为他们建议执行make install
步骤,这样编译器期望的包含和库文件就在那里,并且在运行程序时Java也可以加载它们。
如果是这样,为什么我需要首先构建自己的jars呢?
我不是一个提交者,所以不能确定。我想其中一部分原因是为了提高开发效率-他们宁愿改善代码,而不是为用户创建jar包,而用户也可以自己创建jar包。
更重要的是-由于JAR文件不足,你还必须构建DLL文件,所以将JAR和DLL文件一起构建才更有意义。这样,您可以确保JNI包装器在C语言中实现了与Java包装器类中本地声明完全匹配的本机方法。
祝你好运,希望这可以帮助你。
zeromq
的纯Java移植版。在某些情况下,它甚至比绑定库更快速。 - drzymala