Jruby Gems-in-a-jar问题

时间:2010-04-19 00:36:55

标签: ruby rubygems jruby gems-in-a-jar

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

只要我乐意坚持标准的jruby库,一切都很好。正如在jruby网站上所解释的,我只是将jruby-complete.jar库复制到远程机器并在运行时将其包含在类路径中。我解雇了我编译的脚本,它的工作原理:很酷!

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

我想要为我需要使用的每个库编译一个.jar,将它们全部放在远程机器上的公共文件夹中,并在运行我编译时在运行时将它们包含在类路径中JVM上的jruby脚本 这就是说,我试着按照这里的说明进行操作: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 ./chronic chronic --no-rdoc --no-ri
  2. 将它打包成一个罐子: jar cf chronic.jar -C chronic。
  3. 编写两行测试脚本,将其另存为testt.rb:

      

    要求'慢性'      Chronic.parse( '明天')

  4. 编译:jrubyc testt.rb

  5. 使用以下命令运行生成的java类testt.class(将jruby-complete.jar和chronic.jar放在与java类相同的文件夹中): java -cp。:/ jruby-complete.jar:./ chronic.jar testt
  6. 我收到以下错误:

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

将它放在测试脚本的顶部:

require 'rubygems'