rjb:从Ruby调用java方法,在多个目录中编译文件

时间:2011-06-08 16:03:54

标签: java ruby classpath rjb

我有一个在两个目录中编译的Java库:

Directory A
   com.foo.bar.app.* //without test
Directory B
   com.foo.bar.app.test.*

我的目标是使用rjb gem调用com.foo.bar.app.test(在目录A中具有依赖项)的一些简单java方法。

在示例中,他们以此为例:

Rjb::load(classpath = '.', jvmargs=[])

如何使用rjb从类com.foo.bar.app.test.create调用方法methodFromCreate()

2 个答案:

答案 0 :(得分:3)

您可以使用以下内容:

require 'rjb'

RJB_LOAD_PATH = ["Directory A", "Directory B"].join(File::PATH_SEPARATOR)
RJB_OPTIONS = ['-Djava.awt.headless=true','-Xms16m', '-Xmx32m']

Rjb::load RJB_LOAD_PATH, RJB_OPTIONS

my_create_class = Rjb::import('com.foo.bar.app.test.Create')
my_create = my_create_class.new

my_create.methodFromCreate()

我添加了目前正在使用的de RJB_OPTIONS只是为了举例说明,如果你需要任何awt东西删除dthe -Djava.awt,...选项。

答案 1 :(得分:0)

我不知道rjb gem,但JRuby很容易做到这一点

在ruby代码中,您需要java并将类层次结构的路径添加到类路径中。如果导入该类,则可以通过在类名上调用new来创建实例。如果不导入该类,则可以通过在完全限定的类名称上调用new来创建实例。

require 'java'
$CLASSPATH<< "path/to/java/classes";  

import com.foo.bar.app.Class1

c1 = Class1.new
c2 = com.foo.bar.app.test.Class2.new