Установка драгоценных камней внутри (J) Ruby code - PullRequest
6 голосов
/ 12 февраля 2010

Я использую JRuby вместе с Огурец и ищу способ бега

 jruby -S gem update --system
 jruby -S gem install cucumber

из Java ScriptEngine . Никакое количество Google не позволило мне решить эту проблему. По сути, я хочу иметь возможность сделать что-то вроде этого

 ScriptEngineManager manager = new ScriptEngineManager();
 ScriptEngine jRubyEngine = manager.getEngineByName("jruby");
 : // some unknown code here
 jRubeEngine.eval("call gems install/update from inside JRuby")

Есть ли способ сделать это?

1 Ответ

7 голосов
/ 12 февраля 2010

RubyGems - это просто библиотека Ruby. Команда gem является лишь тонкой оболочкой для библиотеки. Все, что вы можете сделать с помощью команды, вы можете сделать с библиотекой.

На самом деле я никогда не использовал библиотеку, но, думаю, вы хотите посмотреть на Gem :: DepencyInstaller , и код будет выглядеть примерно так ( полностью не проверено только что вытащил из моего ты знаешь что):

ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine jRubyEngine = manager.getEngineByName("jruby");
String s = "
  require 'rubygems'
  require 'rubygems/dependency_installer'
  Gem::DependencyInstaller.new.install('cucumber')
";
jRubyEngine.eval(s);
...