从Java Class Path加载Jruby脚本



我有一个看起来像这样的简单Maven项目:

  • $ proj/src/main/java/to to to-classes/installerloader.java
  • $ proj/src/main/resources/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未加载。我在这里做错了什么?

classpath文件名不应以 /开头。应该只是:

container.runScriptlet(PathType.CLASSPATH, "installer.rb");

这是Java的ClassLoader API的一个古怪的无证方面(当然,这当然是由ScriptingContainer在封面下使用的,用于从ClassPath加载文件)。

这是最终使它起作用的代码:

container.setArgv(args);
InputStream is = this.getClass().getResourceAsStream("/installer.rb");
container.runScriptlet(is, "installer.rb");

相关内容

  • 没有找到相关文章

最新更新