我有一个简单的maven项目,如下所示:
这就是InstallerLoader.java的样子:
package com.mycompany;
import org.jruby.embed.ScriptingContainer;
import org.jruby.embed.PathType;
public class InstallerLoader {
public static void main(String[] args) {
System.out.println("Running..");
ScriptingContainer container = new ScriptingContainer();
container.runScriptlet(PathType.CLASSPATH, "/installer.rb");
}
}
这就是installer.rb的样子:
require 'optparse'
options = { :verbose => false}
optparse = OptionParser.new do |opts|
opts.on('-v', '--verbose', 'Verbose output') do
options[:verbose] = true
end
end
optparse.parse!
puts options[:verbose]
当我尝试运行它时,它似乎没有加载installer.rb。没有堆栈跟踪或任何其他表明未加载installer.rb的内容。我在这里做错了什么?
答案 0 :(得分:0)
类路径文件名不应以/
开头。它应该只是:
container.runScriptlet(PathType.CLASSPATH, "installer.rb");
这是Java的ClassLoader API的quirky undocumented aspect(当然,ScriptingContainer正在使用它来从类路径加载文件)。
答案 1 :(得分:0)
这是最终使其发挥作用的代码:
container.setArgv(args);
InputStream is = this.getClass().getResourceAsStream("/installer.rb");
container.runScriptlet(is, "installer.rb");