与this问题类似,我想知道如何获取当前jar文件的路径。但与其他问题不同,我想知道 jar 的路径,而不是jar内部当前文件的路径。例如,假设我在“/Users/MyUser/Jars/foo.jar”中有一个jruby jar,里面是“foo.jar / java / style / class / path.class”中编译的ruby文件。 class.path怎么能得到路径“/Users/MyUser/Jars/foo.jar”?
我也看到了a way to do it in Java,但我只是不知道如何翻译它......
答案 0 :(得分:2)
我已经尝试过这一点,并且任何从JRuby调用代码的尝试都会返回jruby 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
,但如果您使用src/java/org/rubyforge/rawr
)可以轻松调整package org.rubyforge.rawr;
public class Path {
public String getJarPath() {
return getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
}
}
创建Java类:
require 'java'
java_import 'org.rubyforge.rawr.Path'
puts Path.new.get_jar_path
然后从JRuby脚本中调用此类:
{{1}}
答案 1 :(得分:0)
不使用java
计算出来def get_jar_path
scriptpath = __FILE__[/(.*)\/.+\.jar!/]
$1[6..-1]
end