2015-07-24 1 views
0

Я хотел бы выполнить скрипт Ruby с Java с помощью JRuby (Linux Mint). Я могу успешно выполнить сценарий с терминала, вызвав ruby script.rb. Тем не менее, сценарий содержит require, который вызывает "no such file to load" исключение при попытке запустить его из Java с помощью JRuby:Выполнение скрипта Ruby из Java с использованием результатов JRuby в 'LoadError: нет такого файла для загрузки ...'

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"); 
    } 
} 

Проблема, кажется, в require ... части script.rb, поскольку этот код работает отлично например, простой скрипт, который отображает только текст.

Сценарий использует WinRb, библиотеку Ruby для удаленного управления Windows. 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, чтобы выполнить этот сценарий успешно?

ответ

Смежные вопросы