【对于Java初学者】在Java中调用JRuby

为什么这是必要的?

如果在无法安装Ruby的计算机上可以使用Java,那么就可以选择使用JRuby。不过,启动速度会比较慢。

为此,我考虑创建一个类似以下的图形用户界面(GUI),并提前配置好JVM环境,然后编写Ruby脚本或更改数据以进行处理。

这次我们将省略这个GUI的创建方法,只介绍一下如何从这个Java应用程序调用JRuby并执行脚本。

image.png

需要的东西 (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脚本。

我参考了这个网站。谢谢。

广告
将在 10 秒后关闭
bannerAds