Я пытаюсь написать код в ruby (используя jruby) для компиляции в java-байт-код с помощью jrubyc и развернут на удаленную машину, где он будет запущен на JVM (без рубина доступно там).Проблема с Jruby Gems-in-a-jar
Все работает нормально, пока я счастлив придерживаться стандартной библиотеки jruby. Как поясняется на веб-сайте jruby, я просто копирую библиотеку jruby-complete.jar на удаленную машину и включаю ее в путь к классам во время выполнения. Я запускаю скомпилированный скрипт, и он работает: cool!
Проблемы возникают, когда мне нужны некоторые другие библиотеки (обычно рубигемы) для запуска моего скрипта.
Я знаю такие классные вещи, как rawr, которые я успешно протестировал, чтобы собрать все, что вам нужно, в одном пакете. Однако это не то решение, которое я ищу: у меня будет много маленьких скриптов для самостоятельного запуска, и я не хочу, чтобы каждый из них вырос до 10 МБ только потому, что я безумно включал jruby-complete.jar в каждом из них.
Я хотел бы скомпилировать .jar для каждой из библиотек, которые мне нужно будет использовать, поместить их в общую папку на удаленном компьютере и включить их во время выполнения в пути к классам при запуске моего скомпилированные сценарии jruby на JVM.
Это сказало, что я старался следовать инструкциям здесь: http://blog.nicksieger.com/articles/2009/01/10/jruby-1-1-6-gems-in-a-jar
Я пробовал именно этот пример, показанный там, с «хроническим» драгоценным камнем. шаг за шагом Переход:
- Установите камень на месте: Java -jar JRuby-комплектно-1.1.6.jar -S камень установить -i ./chronic хроническую --no-RDoc --no-ри
- Пакет в банку: банку cf хронический.jar -C хронический.
Написать тестовый скрипт две строки, сохранив его как testt.rb:
require 'chronic'
Chronic.parse('tomorrow')Compile с: jrubyc testt.rb
- Выполнить полученный Java класс testt.class следующее (имея как JRuby-complete.jar и chronic.jar в той же папке, что и класс Java): Java -cp:./JRuby-complete.jar: ./ chronic.jar testt
Я получаю следующее сообщение об ошибке :
Исключение в потоке "основного" файла: /Users/ave2/NetBeansProjects/jrubywatir/lib/jruby-complete.jar /METAINF/jruby.home/lib/ruby/site_ruby/shared/builtin/core_ext/symbol. гь: 1: в `const_missing ': неинициализированным постоянная хроническая (NameError)
из testt.rb: 2
... внутренний стек JRuby Опущенные ...
из Module.const_missing (testt.rb: 2)
от (неизвестно). (неизвестно) (: 1)
Я действительно не понимаю, что я делаю неправильно, и я полностью застрял на этом. Я ноб в Ruby, гораздо больше привык к Python: не упустите шанс превратить неверного! :-) Благодаря.
Роб, спасибо за ваш ответ. Я добавил строку и скомпилировал ее снова, но все еще получаю ошибку, хотя и немного отличается (говорит что-то о пользовательском требовании): java -cp.: ./ jruby-complete.jar: ./ chronic.jar testt Исключение из thread "main": /Users/ave2/NetBeansProjects/jrubywatir/lib/jruby-complete.jar! /META-INF/jruby.home/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb: 31: in ' const_missing ': неинициализированный постоянное хроническое (NameError) \t из testt.rb: 3 \t ... внутренний стек JRuby Опущенные ... \t из Module.const_missing (testt.rb: 3) \t из (неизвестно) (. неизвестно) (: 1) – antonio