JRuby で Pragger を実行してみる
Plagger の Ruby 版とも言える Pragger(revision:72)を JRuby(0.9.8)からとりあえず実行するには、
pragger.rb(Pragger のルートディレクトリにある)に以下のような修正を加える必要があった。
- tout8 メソッド呼び出しを削除
- Plugin.new(file) の記述を Plugin.new(file.to_s) に変更
一応、この対応で load_file と print プラグインが JRuby で動作する事は確認。
ただし、全てのプラグインが正常に動作するかどうかは不明。
オリジナルの pragger.rb と JRuby 対応化したものの diff による差分は以下。
12c12 < instance_eval( @source = File.read(file).toutf8, file , 1) --- > instance_eval( @source = File.read(file), file , 1) 17c17 < $plugins[ file.relative_path_from(folder).to_s.gsub("/","::")[0..-4] ]= Plugin.new(file) --- > $plugins[ file.relative_path_from(folder).to_s.gsub("/","::")[0..-4] ]= Plugin.new(file.to_s) 41c41 < eval_pragger(YAML.load(File.read(configFile).toutf8),[]) --- > eval_pragger(YAML.load(File.read(configFile)),[])
tout8 メソッド呼び出しを削除
tout8 メソッドの実行時に以下のようなエラーが発生したため、tout8 を使わない事で回避。
jruby-0.9.8/lib/ruby/1.8/kconv.rb:210:in `method_missing': undefined method `nkf' for NKF:Module (NoMethodError)
JRuby 0.9.8 の NKF モジュールには nkf メソッドが用意されていないため、上記のようなエラーが発生する模様。
NKF モジュールはビルトインモジュールとして jruby.jar に .ser ファイルとして含まれている。
Plugin.new(file) の記述を Plugin.new(file.to_s) に変更
Plugin.new(file) では以下のようなエラーが発生したため、to_s メソッドによる文字列化で回避。
java.lang.ClassCastException: org.jruby.RubyObject cannot be cast to org.jruby.RubyString