【对于Java初学者】在Java中调用JRuby
为什么这是必要的?
如果在无法安装Ruby的计算机上可以使用Java,那么就可以选择使用JRuby。不过,启动速度会比较慢。
为此,我考虑创建一个类似以下的图形用户界面(GUI),并提前配置好JVM环境,然后编写Ruby脚本或更改数据以进行处理。
这次我们将省略这个GUI的创建方法,只介绍一下如何从这个Java应用程序调用JRuby并执行脚本。
需要的东西 (bì de xi)
-
- JRuby本体 jruby-complete-9.4.3.0.jar を使いました
- このサンプルでは log4j2を使用しています
假设 GEM_HOME 位于 $HOME/JGEM。
因此,我们会提前安装所需的 Ruby 库,如下所示(为了省略文档生成,我们使用了 -N)。
GEM_HOME=/home/XXXXX/JGEM java -jar jruby-complete-9.3.6.0.jar -S gem install ライブラリー名 -N
试着写
/**
* JRubyスクリプトをJavaから呼び出す
*
* @param inputData 処理するデータ(文字)
* @param script Rubyスクリプト本体
* @return 処理結果
*/
String execRubyScript(String inputData, String script) {
// 処理結果を格納
String out;
// JRuby
ScriptingContainer jruby = new ScriptingContainer();
// 処理したいデータを標準入力として入れる
logger.debug("スクリプトに渡す文字列:" + inputData);
if (!inputData.isEmpty()) {
String[] stdin = new String[1];
stdin[0] = inputData;
jruby.setArgv(stdin);
}
// この一行がないと二度目の実行に影響が出た
jruby.terminate();
// GEM_HOMEの場所を指定
String gemHome = System.getProperty("user.home") + File.separator + "JGEM";
jruby.callMethod(jruby.runScriptlet("Gem"), "use_paths", gemHome, gemHome);
// スクリプトの実行
try {
Object runScriptlet = jruby.runScriptlet(script.strip());
out = runScriptlet.toString();
logger.debug("スクリプト実行結果:" + out);
} catch (Exception e) {
logger.debug("スクリプト実行失敗:" + e.getMessage());
out = e.getMessage();
}
return out;
}
加上补充说明
我认为除了使用标准输入方法之外,还有其他方法可以将变量传递给Ruby脚本。
我参考了这个网站。谢谢。