从Java类路径加载JRuby脚本

时间:2012-10-19 15:02:45

标签: maven jruby

我有一个简单的maven项目,如下所示:

  • $ PROJ / src / main / java / path-to-classes / InstallerLoader.java
  • $ PROJ / SRC /主/资源/ installer.rb

这就是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的内容。我在这里做错了什么?

2 个答案:

答案 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");