JRuby on BSF
コマンドラインからbsfで用意されたMainを使って実行
E:\jruby-1.1.4\lib\ruby\gems\1.8\gems\rubeus-0.0.6-java\examples>java -Djruby.ho me=%JRUBY_HOME% -classpath %JRUBY_HOME%\lib\jruby.jar;%JRUBY_HOME%\lib\bsf.jar;. org.apache.bsf.Main -in rubeus_swing_example01.rb Result: javax.swing.JFrame[frame0,0,0,410x322,layout=java.awt.BorderLayout,title =Rubeus Swing Example 01,resizable,normal,defaultCloseOperation=EXIT_ON_CLOSE,ro otPane=javax.swing.JRootPane[,4,30,402x288,layout=javax.swing.JRootPane$RootLayo ut,alignmentX=0.0,alignmentY=0.0,border=,flags=16777675,maximumSize=,minimumSize =,preferredSize=],rootPaneCheckingEnabled=true] E:\jruby-1.1.4\lib\ruby\gems\1.8\gems\rubeus-0.0.6-java\examples>
プログラム内から呼び出すことも可能
import java.io.*; import org.apache.bsf.BSFManager; import org.apache.bsf.util.IOUtils; public class CallRubyBSF { public static void main(String[] args) throws Exception { // JRubyエンジンを初期化 BSFManager.registerScriptingEngine("ruby", "org.jruby.javasupport.bsf.JRubyEngine", new String[]{"rb"}); BSFManager manager = new BSFManager(); // Rubyスクリプトを実行 manager.exec("ruby", "rubeus_swing_example01.rb", -1, -1, getFileContents("rubeus_swing_example01.rb")); } private static String getFileContents(String filename) throws IOException { FileReader in = new FileReader(filename); return IOUtils.getStringFromReader(in); } }
gemも問題なく動きます。
が、BSFはJava6のScriptingにとって変わるような気がします。