2010-02-12 22 views
6

Sto usando JRuby insieme cetriolo ed è alla ricerca di un modo di gestireInstallazione di gemme all'interno del codice (J) Rubino

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

dall'interno del Java ScriptEngine. Nessuna quantità di Google mi ha permesso di risolvere questo problema. Fondamentalmente voglio essere in grado di fare qualcosa di simile

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

C'è un modo per realizzare questo?

+0

Nel caso in cui qualcuno si imbattesse in questa domanda, di recente ho creato uno screen cast che potrebbe aiutare: http://javajing.com/2012/06/01/ruby-from-java.html. Credo che jruby-complete abbia una versione del comando gem che puoi usare da java. Ad esempio, puoi installare la gemma sass in questo modo: 'java -jar jruby-complete-1.6.7.jar -S gem install -i ./sass-gems sass --no-rdoc --no-ri' – Upgradingdave

risposta

7

RubyGems è solo una libreria Ruby. Il comando gem è solo un involucro sottile attorno alla libreria. Tutto ciò che puoi fare con il comando, puoi farlo con la libreria.

non ho mai usato la biblioteca, ma credo che ciò che si desidera guardare è la Gem::DepencyInstaller e il codice sarebbe simile a questa (completamente testato, appena tirato fuori dalla mia tu-sai-cosa) :

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); 
Problemi correlati