【问题标题】:Executing a Ruby script from Java using JRuby results in 'LoadError: no such file to load ...'使用 JRuby 从 Java 执行 Ruby 脚本会导致“LoadError: no such file to load ...”
【发布时间】:2015-07-24 11:18:46
【问题描述】:

我想使用 JRuby (Linux Mint) 从 Java 执行一个 Ruby 脚本。我可以通过调用ruby script.rb 从终端成功执行脚本。但是,该脚本包含一个 require,当尝试使用 JRuby 从 Java 执行它时会导致 "no such file to load" 异常:

package com.company;

import org.jruby.embed.LocalVariableBehavior;
import org.jruby.embed.PathType;
import org.jruby.embed.ScriptingContainer;

public class Main
{
    public static void main(String[] args)
    {
        ScriptingContainer ruby;
        ruby = new ScriptingContainer(LocalVariableBehavior.PERSISTENT);        
        Object result = ruby.runScriptlet(PathType.ABSOLUTE, "/home/user/Scripts/script.rb");
    }
}

问题似乎出在 script.rbrequire ... 部分,因为此代码适用于例如一个只显示文本的简单脚本。

脚本使用WinRb,这是一个用于 Windows 远程管理的 Ruby 库。 script.rb:

require 'winrm'

endpoint = 'http://somehost.domain.org:5985/wsman'
krb5_realm = 'DOMAIN.ORG'
command = 'hostname'

winrm = WinRM::WinRMWebService.new(endpoint, :kerberos, :realm => krb5_realm)

winrm.cmd(command) do |stdout, stderr|
  STDOUT.print stdout
  STDERR.print stderr
end

当我运行 Java 代码时,我得到了这个异常:

LoadError: no such file to load -- winrm
  require at org/jruby/RubyKernel.java:940
    <top> at /home/user/Scripts/script.rb:5
Exception in thread "main" org.jruby.embed.EvalFailedException: 
(LoadError) no such file to load -- winrm

这是我尝试过的:

  1. require 'rubygems' 添加到脚本顶部。这只会将异常更改为LoadError: no such file to load -- rubygems
  2. 指定完整路径:require '/var/lib/gems/1.9.1/gems/winrm-1.3.3/lib/winrm'。而不是原来的异常,在运行时我现在得到:LoadError: no such file to load -- date require at org/jruby/RubyKernel.java:940

其他:

$ ruby -v
ruby 1.9.3p484 (2013-11-22 revision 43786) [x86_64-linux]
$ jruby -v
jruby 9.0.0.0 (2.2.2) 2015-07-21 e10ec96 Java HotSpot(TM) 64-Bit Server VM 25.45-b02

如何让 JRuby 成功执行此脚本?

【问题讨论】:

    标签: java ruby jruby winrm


    【解决方案1】:

    解决办法是:

    jruby -S gem install winrm
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多