首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用RJB从Ruby调用scala代码

使用RJB从Ruby调用scala代码
EN

Stack Overflow用户
提问于 2012-02-28 19:27:42
回答 1查看 707关注 0票数 2

我即将开始重写我们的Rails应用程序的零碎代码,这些代码在Scala中执行相对较重的数字处理,以提高速度。最终的计划是让scala守护进程在后台运行,只使用Rails作为前端,但同时我希望现在能够重写一些速度较慢的代码,并从Ruby同步调用它们。

出于这个原因,我一直在研究RJB (我不能使用JRuby),希望我也能在scala中使用它,因为它最终会编译成Java字节码。我用谷歌搜索了一下,看看是否能找到已经做过这件事或类似的人,但没有找到任何东西。

我最初的天真尝试是编译一个测试scala类并将其打包到jar中,然后尝试使用Rjb加载它,如下所示:

代码语言:javascript
复制
Rjb::load("#{Rails.root}/lib/scala/scala-tester-1.0-SNAPSHOT.jar")
MyClass = Rjb::import('com.mydomain.MyClass')

但这只会产生一个java.lang.NoClassDefFoundError: com/mydomain/MyClass

我测试了导入一个标准的java类,它工作得很好,所以我测试了导入scala.Int,这导致了另一个NoClassDefFoundError。这在某种程度上表明问题可能出在scala库没有包含在类路径中?但是,自从我不得不处理Java类路径的无休止的令人头疼的问题以来,已经有很长一段时间了,所以我对诊断和修复这类问题已经相当生疏了。

那么,有没有人这么做过?如果不是,我的预感听起来正确吗?有什么建议吗?或者,有没有什么我没有考虑到的事情,这意味着这种方法根本不会起作用?

编辑:我意识到我使用了稍微不正确的语法。现在我已经设法让它使用如下语法加载我的测试jar:

代码语言:javascript
复制
Rjb::load(classpath = "#{Rails.root}/lib/scala/scala-tester-1.0-SNAPSHOT.jar", jvmargs=[]) 

但是使用不同的java.lang.NoClassDefFoundError: scala/ScalaObject失败,这表明它肯定无法加载scala库。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-28 20:42:40

我让它与下面的代码一起工作:

代码语言:javascript
复制
RJB_LOAD_PATH = ["#{ENV['SCALA_HOME']}/lib/scala-library.jar", "#{Rails.root}/lib/scala/scala-tester-1.0-SNAPSHOT.jar"].join(File::PATH_SEPARATOR)
RJB_OPTIONS = []

Rjb::load(RJB_LOAD_PATH, RJB_OPTIONS)

我将把这段代码放在初始化器中,但它看起来还是有点老套,如果有人有更好的建议,我会很高兴听到的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9481051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档