org.jruby.embed.EvalFailedException:(LoadError)没有要加载的文件 [英] org.jruby.embed.EvalFailedException: (LoadError) no such file to load

查看:86
本文介绍了org.jruby.embed.EvalFailedException:(LoadError)没有要加载的文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经使用鸣鸟从红宝石代码创建了jar文件.jar中的文件结构如下:

I've created jar file from ruby code using warbler. File structure within jar is as below:

core.jar
----核心
-------- lib
------------ gui.class
------------ gui.rb

core.jar
----core
--------lib
------------gui.class
------------gui.rb

我还有另一个Java应用程序,我想从中运行gui.rb的Gui类中的"connect"功能.

I've other java application from which I want to run "connect" function which is in Gui class of gui.rb.

我尝试了以下Java代码:

I've tried below code in java:

ScriptingContainer SCRIPTING_CONTAINER = new ScriptingContainer;
// String CORE_JAR_PATH = "core.jar";
String CORE_JAR_PATH = "core.jar!/core/lib";
SCRIPTING_CONTAINER.getLoadPaths().add(CORE_JAR_PATH);
SCRIPTING_CONTAINER.runScriptlet("require 'gui'");

上面代码的最后一行给我一个例外:"LoadError:没有要加载的文件-gui".如何调用gui.rb函数?

The last line in above code is giving me the exception "LoadError: no such file to load -- gui". How can I call the function of gui.rb?

推荐答案

core/lib/gui.rb

puts "core was loaded!"

我将Ruby代码(不使用Warbler或类似工具)打包为 jar -cf core.jar core .

I packed the Ruby code (not using Warbler or anything like that) as jar -cf core.jar core.

Main.java

import org.jruby.embed.ScriptingContainer;

public class Main {
    public static void main(String[] args) {
        ScriptingContainer container = new ScriptingContainer();
        container.runScriptlet("require './core.jar'");
        container.runScriptlet("require 'core/lib/gui'");
    }
}

编译为 javac -cp jruby-1.7.9.jar Main.java -d build

正在运行

然后,我能够以 java -cp jruby-1.7.9.jar:build/Main 的身份运行此代码.

I was then able to run this code as java -cp jruby-1.7.9.jar:build/ Main.

这篇关于org.jruby.embed.EvalFailedException:(LoadError)没有要加载的文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆