获取 JRuby jar 路径

2024-04-13

如同this https://stackoverflow.com/questions/8743854/how-to-get-the-path-of-the-jruby-warbler-jar-file问题,我想知道如何获取当前jar文件的路径。但与其他问题不同的是,我想知道jar的路径,不是当前文件的路径inside罐子。例如,假设我在“/Users/MyUser/Jars/foo.jar”中有一个 jruby jar,里面有一个编译后的 ruby​​ 文件,位于“foo.jar/java/style/class/path.class”。 class.path如何获取路径“/Users/MyUser/Jars/foo.jar”?

我也看到了一种用 Java 实现的方法 https://stackoverflow.com/questions/320542/how-to-get-the-path-of-a-running-jar-file,但我就是不知道怎么翻译...


我对此进行了一些实验,任何从 JRuby 调用代码的尝试都会返回 jruby jar 本身,这很有意义,因为逻辑确实是从该 jar 评估/执行的。例如:

require 'java'
puts self.to_java.get_class().protection_domain().code_source().location().path()

or

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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取 JRuby jar 路径 的相关文章

随机推荐