9

我正在尝试用 ruby​​ 编写一些代码(使用 jruby),以使用 jrubyc 编译为 java 字节码并部署到远程机器上,它将在 JVM 上运行(那里没有可用的 ruby​​)。

只要我乐于使用标准的 jruby 库,一切都可以正常工作。正如 jruby 网站上所解释的,我只是将 jruby-complete.jar 库复制到远程机器上,并在运行时将其包含在类路径中。我启动了我编译的脚本,它可以工作:酷!

当我需要一些其他库(通常是 ruby​​gems)来运行我的脚本时,问题就开始了。
我知道像 rawr 这样很酷的东西——我成功地测试过——将你需要的所有东西放在一个包中。然而,这不是我正在寻找的解决方案:我将有许多小脚本独立运行,我不希望每个脚本都增长到至少 10 MB,因为我疯狂地在每个脚本中都包含了 jruby-complete.jar他们。

我想要的是为我需要使用的每个库编译一个.jar,将它们全部放在远程机器上的一个公共文件夹中,并在我运行编译的 jruby 脚本时在运行时将它们包含在类路径中JVM。
这就是说,我尝试按照此处的说明进行操作:http: //blog.nicksieger.com/articles/2009/01/10/jruby-1-1-6-gems-in-a-jar
我完全尝试了显示的示例在那里,与“慢性”宝石。一步一步来:

  1. 在本地安装gem:java -jar jruby-complete-1.1.6.jar -S gem install -i ./chronicchronic --no-rdoc --no-ri
  2. 将其打包到一个 jar 中: jar cfchronic.jar -C Chronic 。
  3. 编写两行测试脚本,将其保存为 testt.rb:

    需要 'chronic'
    Chronic.parse('tomorrow')

  4. 编译:jrubyc testt.rb

  5. 使用以下命令运行生成的 java 类 testt.class(将 jruby-complete.jar 和chronic.jar 与 java 类放在同一文件夹中): java -cp .:/jruby-complete.jar:./chronic.jar测试

我收到以下错误:

线程“主”文件中的异常:/Users/ave2/NetBeansProjects/jrubywatir/lib/jruby-complete.jar!/METAINF/jruby.home/lib/ruby/site_ruby/shared/builtin/core_ext/symbol.rb:1:在“const_missing”中:
来自 testt.rb:2的未初始化常量 Chronic (NameError)
...已删除内部 j​​ruby 堆栈...来自 (unknown).(unknown)(:1)
的 Module.const_missing(testt.rb:2 )

我真的不明白我做错了什么,我完全坚持这一点。我是 Ruby 的菜鸟,更习惯于 Python:不要错过让异教徒皈依的机会!:-) 谢谢。

4

2 回答 2

2

据我所知,您似乎没有做错任何事情,而且您可能遇到了错误。您可以使用更新的版本( http://jruby.org/download )尝试您的示例,如果您仍然看到问题,请在http://bugs.jruby.org/创建一个错误?谢谢。

于 2010-04-20T18:32:22.437 回答
1

把它放在你的测试脚本的顶部:

require 'rubygems'

于 2010-04-19T07:49:27.097 回答