Jruby

Da sia.
Vai alla navigazione Vai alla ricerca

jsr223 con lenny

apt-get install jruby-1.0

Oppure download del tar.gz dal sito del jruby e scompattamento in una directory. In questo secondo caso ricordarsi di creare la variabile d'ambiente JRUBY_HOME e accodare la PATH $JRUBY_HOME/bin.


File di test org/jrubycookbook/ch03/Ruby223Runner.java (Jruby CookBook O'Reilly):

 package org.jrubycookbook.ch03;
 import javax.script.ScriptEngine;
 import javax.script.ScriptEngineManager;
 import javax.script.ScriptException;
 public class Ruby223Runner {
	public static void main(String[] args) throws ScriptException {
		ScriptEngineManager scriptManager = new ScriptEngineManager();
		ScriptEngine engine = scriptManager.getEngineByName("jruby");	
                engine.eval("puts 'Hallo World'");
		}
 }

Download di jsr223-engines.zip, unzip e cp di jruby-engine.jar da jruby/build a .:

bacedifo

Così funziona: download di

Si scompatta jsr223-engines in ./; si scompatta jruby-1.1.6.tar.gz in /opt, si scompatta jruby-engine-1.1.6.zip in ./.

cp -v /opt/jruby-1.1.6/lib/jruby.jar ./jruby/lib 
cp -v ./jruby-engine-1.1.6/lib/jruby-engine.jar .
francesco@bacedifo:~/sviluppo/jruby$ javac org/jrubycookbook/ch03/Ruby223Runner.java
francesco@bacedifo:~/sviluppo/jruby$ java -cp .:jruby/lib/jruby.jar:jruby-engine.jar org/jrubycookbook/ch03/Ruby223Runner
Hallo World
java -version
java version "1.6.0_12"
Java(TM) SE Runtime Environment (build 1.6.0_12-b04)
Java HotSpot(TM) Client VM (build 11.2-b01, mixed mode, sharing)

Trabocchetti

java org/jrubycookbook/ch03/Ruby223Runner
Exception in thread "main" java.lang.NoSuchMethodError: org.jruby.Ruby.newInstance()Lorg/jruby/Ruby;
	at com.sun.script.jruby.JRubyScriptEngine.init(JRubyScriptEngine.java:475)
	at com.sun.script.jruby.JRubyScriptEngine.<init>(JRubyScriptEngine.java:96)
	at com.sun.script.jruby.JRubyScriptEngineFactory.getScriptEngine(JRubyScriptEngineFactory.java:134)
	at javax.script.ScriptEngineManager.getEngineByName(ScriptEngineManager.java:225)
	at org.jrubycookbook.ch03.Ruby223Runner.main(Ruby223Runner.java:11)

jruby.jar e jruby-engine.jar non sono alla stessa versione. manca lo switch -cp settato a jruby.jar e jruby-engine.jar (stessa versione)

 java -cp .:./jruby.jar:./jruby-engine.jar org.jrubycookbook.ch03.Ruby223Runner 
builtin/java/exceptions.rb:18 warning: JavaUtilities.add_proxy_extender is deprecated - use JavaUtilities.extend_proxy instead
Exception in thread "main" java.lang.NullPointerException
	at org.jrubycookbook.ch03.Ruby223Runner.main(Ruby223Runner.java:11)
jruby1.0 --version
ruby 1.8.5 (2008-06-03 rev 4810) [i386-jruby1.0.2]

jruby1.0 è ancora installato, ma si sta usando jruby-1.1.6 (provare a disinstallare jruby1.0) oppure build path sporco di jar di versioni differenti.

debian-specifico

Se usa jruby scaricato dal sito, la costruzione dei classpath per l'inclusione di librerie jar darà dei problemi. La soluzione che funziona è:

  • copiare lo script bash in /usr/lib/jruby/bin/jruby in $JRUBY_HOME/bin (sovrascriverlo)
  • copiare i jar file in $JRUBY_HOME/lib