2010-02-24 50 views
1

我宁愿不“重新发明轮子”,我发现了一个Ruby项目,它提供了我在Java应用程序中需要的功能(没有预先存在的Java项目可以满足我的需求 - 相信我,我看过了) 。所以,最好的情况是,我能够从我的Java代码(ala JSR223)运行Ruby代码。我应该尝试在Java项目中重用Ruby代码吗?

但是,这个Ruby项目依赖于安装了几个gem。我对将整个Java应用程序转换为JRuby应用程序并不感兴趣,但我希望能够利用此项目。有没有简单的方法来从宝石代码加载到ScriptEngine,或者我只是要求头痛?

+2

是的,继续,并告诉我们它是如何去的:P – OscarRyz 2010-02-24 23:01:15

回答

2

JRuby是一个坚实的平台,与Java很好地集成在一起。但Rubygems不能很好地与Java构建工具集成。

如果任何宝石包含本地C代码,那么忘记它,您不能在JRuby中使用它们。

如果所有的宝石(和他们所有的依赖)是纯Ruby,它在技术上是可以从JRuby中使用它们,但你有头痛得到它们封装在JAR文件,这样JRuby运行时能够找到它们。

2

大多数情况下,我会说因为复杂。尽管这是主观的,但我宁愿花时间重新编写它 - 你可以改进,当你完成后,你会更好地理解它。

+0

我同意,如果可能的话,将其移植到java将是美好的。但是,由于时间限制,我可能会使用的替代方法是将其作为Web服务运行。 – 2010-02-24 22:56:07

1

您可能会考虑的一个选项是将应用程序拆分为两部分,它们使用诸如管道/文件(或者简单的stdin和stdout)或某种RPC机制进行交互。这样的方法是否真的有意义取决于Ruby库的功能 - 在两个应用程序之间创建接口可能比实际重新实现Java中的东西更复杂。

1

我已经从JRuby中重用了Java代码,我不明白为什么不能这样做。

另一个想法是,您可以运行Ruby代码,然后在Web服务或一组Web服务上调用Java应用程序? Sinatra使得为Ruby代码编写Web服务包装器变得很简单。 Java并不缺乏调用Web服务的工具。

相关问题