移植库时首先要做什么

What to do first when porting library

我想访问 Ruby 中的 Java 库,例如 Kafka 已经为每个操作提供了 jar,如果我想从 Ruby 使用它我需要做什么?

可能我只需要 运行 shell 命令到 运行 Ruby 中的 Jar,或者我是否需要将库移植到 Ruby?如果归结为移植库,那该怎么做呢?

提前致谢

PS:Java、Ruby或Kafka只是例子。我需要知道的是如何移植图书馆的大局。当然,如果您也添加一些代码示例,我会非常高兴:)

使用 JRuby,您可以导入 jar 文件,然后在该 jar 中包含您需要的 类:

require 'java'
require '/path/to/your.jar'

include_class 'com.really.long.ClassName'

但是对于 JRuby 以外的 Ruby 实现,您别无选择,只能与外部 java 进程通信(通过套接字、IPC、kill...)。

我同意 Aetherus 的观点,即使用 JRuby 是最快最方便的方法。然而,我相信除了 与外部 Java 进程通信 之外,还有其他选择。选择什么可能取决于你想调用什么代码。我看到至少两个其他选项。

  • 将要调用的Java代码包裹在主程序中,在命令行中调用。这会很慢,因为 Java 需要开始并且需要很长时间,但在某些情况下可能是一个快速前进的方式。
  • 从使用 Ruby 编译的 C 代码中调用 Java 代码。这仍然需要加载 JVM,但您可能只需要加载一次。我发现 article 概述了如何使用 JNI 解决此问题。

这两条路都可能会给您带来很多痛苦,但如果坚持进行 MRI 很重要,那么这趟旅行可能是值得的。玩得开心!