Я немного поэкспериментировал с этим, и любая попытка вызвать код из JRuby возвращает сам jarby jar, что имеет смысл, поскольку логика действительно оценивается / выполняется из этого jar. Например:
require 'java'
puts self.to_java.get_class().protection_domain().code_source().location().path()
или
require 'java'
class Path
def get_jar_path
self.to_java.get_class().protection_domain().code_source().location().path()
end
end
puts Path.new.get_jar_path
оба возвращают путь к jruby-complete.jar
, что может быть полезно в некоторой степени, но, очевидно, не то, что вы ищете.
Единственный способ заставить это работать (с rawr
, но это можно легко адаптировать, если вы используете warbler
) - это создать класс Java в src/java/org/rubyforge/rawr
:
package org.rubyforge.rawr;
public class Path {
public String getJarPath() {
return getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
}
}
Затем вызовите этот класс из скрипта JRuby:
require 'java'
java_import 'org.rubyforge.rawr.Path'
puts Path.new.get_jar_path