获取JRuby jar路径

时间:2012-03-16 01:32:13

标签: java jar jruby filepath

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,但我只是不知道如何翻译它......

2 个答案:

答案 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