close

RubyHelp.java:

public class RubyHelper {
  static {
    System.setProperty("jruby.home", new File("").getAbsolutePath());
  }

  private RubyHelper() {
  }

  public static Object create(String className, Class interfaceClazz, String scriptFileName) {
    InputStream scriptInputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(scriptFileName);
    if (null == scriptInputStream) {
      throw new RuntimeException("Could not find " + scriptFileName);
    }
    StringBuilder sb = new StringBuilder();
    byte[] buf = new byte[8192];
    try {
      for (int n; (n = scriptInputStream.read(buf)) != -1;) {
        sb.append(new String(buf, 0, n, "UTF-8"));
      }
      scriptInputStream.close();
    } catch (IOException e) {
      throw new RuntimeException("Error loading " + scriptFileName + ": " + e.getMessage());
    }
    Ruby runtime = JavaEmbedUtils.initialize(new ArrayList());
    runtime.eval(runtime.parse(sb.toString(), scriptFileName, runtime.getCurrentContext().getCurrentScope(), 0, false));
    return JavaEmbedUtils.rubyToJava(runtime, runtime.evalScriptlet(className + ".new"), interfaceClazz);
  }
}

HelloService.java:

public interface HelloService {
  void hello();
}

hello.rb:

class Hello
  def hello
    puts 'hello there'
  end
end

Test.java:

public class Test {
  public static void main(String[] args) throws Exception {
    HelloService s = (HelloService)RubyHelper.create("Hello", HelloService.class, "hello.rb");
    s.hello();
  }
}
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Forth 的頭像
    Forth

    不就是個blog

    Forth 發表在 痞客邦 留言(0) 人氣()