【发布时间】:2016-02-15 23:47:55
【问题描述】:
所以,我尝试在 JRuby 的帮助下在我的 java 代码中使用我的 ruby 脚本。但是有一个问题,eclipse无法使用我安装的gem。出于测试目的,我一直在尝试运行一段需要我安装的“nokogiri”ruby gem 的代码。当我尝试运行 java 代码时,得到的结果如下:
LoadError: no such file to load -- nokogiri
require at org/jruby/RubyKernel.java:939
<top> at /home/amng/workspace/scripts/xx/x/getMSPatches:4
Exception in thread "main" org.jruby.embed.EvalFailedException: (LoadError) no such file to load -- nokogiri
at org.jruby.embed.internal.EmbedEvalUnitImpl.run(EmbedEvalUnitImpl.java:131)
at org.jruby.embed.ScriptingContainer.runUnit(ScriptingContainer.java:1307)
at org.jruby.embed.ScriptingContainer.runScriptlet(ScriptingContainer.java:1352)
at jobs.Teste.run(Teste.java:17)
at jobs.Teste.main(Teste.java:11)
原因:org.jruby.exceptions.RaiseException: (LoadError) no such file to load -- nokogiri 在 org.jruby.RubyKernel.require(org/jruby/RubyKernel.java:939) 在 RUBY.(/home/amng/workspace/scripts/myPrecious/MSPatches/getMSPatches:4)
我从网站下载了 jruby.jar 并添加到项目的构建路径中。我还使用 Dynamic Languages Toolkit (DLTK) 插件将 Eclipse 指向了 JRuby 二进制文件。我需要做什么才能确保 eclipse 可以使用我安装的 gem?
编辑:我的 java 代码:
import org.jruby.embed.ScriptingContainer;
import org.jruby.embed.LocalVariableBehavior;
import org.jruby.embed.PathType;
public class Main {
public static void main(String[] args) {
ScriptingContainer ruby = new ScriptingContainer(LocalVariableBehavior.PERSISTENT);
Object result = ruby.runScriptlet(PathType.ABSOLUTE, "/home/amng/workspace/scripts/myPrecious/MSPatches/getMSPatches");
System.out.println(result);
}
}
我的(工作)ruby 代码 (getMSPatches) 的前两行是:
# encoding: UTF-8
require 'nokogiri'
【问题讨论】:
-
Eclipse,认真的吗?尝试先安装 nokogiri,然后重复您的操作。还有
gem list | grep "nokogiri". -
Eclipse 有什么问题?自从我用 Java 开发任何东西以来已经有一段时间了,但当时 Eclipse 是一个很棒的工具。你问的输出是:nokogiri (1.6.6.2)。
-
您是否在脚本中添加了
require 'nokogiri'?你能在你使用它的地方添加一段代码吗? -
我做到了,我添加了 java 和一段 ruby 代码。我可能遗漏了一些东西......因为我将 jruby.jar 添加到项目中,Eclipse(也只是在 IntelliJ 上尝试过)是否使用 jruby 的 jar?如果是这样,我该如何解决这个问题?如何告诉 IDE 对文件和导入使用 JAR,但使用我系统安装的 ruby?