我正在尝试用 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
我完全尝试了显示的示例在那里,与“慢性”宝石。一步一步来:
- 在本地安装gem:java -jar jruby-complete-1.1.6.jar -S gem install -i ./chronicchronic --no-rdoc --no-ri
- 将其打包到一个 jar 中: jar cfchronic.jar -C Chronic 。
编写两行测试脚本,将其保存为 testt.rb:
需要 'chronic'
Chronic.parse('tomorrow')编译:jrubyc testt.rb
- 使用以下命令运行生成的 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)
...已删除内部 jruby 堆栈...来自
(unknown).(unknown)(:1)
的 Module.const_missing(testt.rb:2 )
我真的不明白我做错了什么,我完全坚持这一点。我是 Ruby 的菜鸟,更习惯于 Python:不要错过让异教徒皈依的机会!:-) 谢谢。