我试图在ruby中编写一些代码(使用jruby),用jrubyc编译成java字节码,并部署到远程机器上,它将在JVM上运行(没有可用的ruby).
只要我乐意坚持标准的jruby库,一切都很好.正如在jruby网站上所解释的,我只是将jruby-complete.jar库复制到远程机器并在运行时将其包含在类路径中.我解雇我编译的脚本,它的工作原理:很酷!
当我需要一些其他库(通常是rubygems)来运行我的脚本时,问题就开始了.
我知道很酷的东西,比如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
我尝试了完全显示的例子在那里,有"慢性"宝石.一步一步走:
编写两行测试脚本,将其保存为testt.rb:
需要'慢性'
Chronic.parse('明天')
编译:jrubyc testt.rb
我收到以下错误:
异常在线程"主要"文件:/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的未初始化常量Chronic(NameError):2
...内部jruby堆栈
从Module.const_missing(testt.rb:2)中
脱离(未知).(未知)(:1)
我真的不明白我做错了什么,我完全坚持这个.我是Ruby中的菜鸟,更习惯Python:不要错过转换异教徒的机会!:-) 谢谢.