2012-03-16 98 views
3

this类似的问题,我想知道如何获取当前jar文件的路径。但不像其他问题,我想知道罐子的路径,而不是里面的罐子的路径。例如,假设我在“/Users/MyUser/Jars/foo.jar”有一个jruby jar,里面是在“foo.jar/java/style/class/path.class”编译的ruby文件。 class.path如何获得路径“/Users/MyUser/Jars/foo.jar”?获取JRuby jar路径

我也看到a way to do it in Java,但我只是不知道如何翻译这...

回答

2

我已经尝试了这个有点,任何试图调用从JRuby的代码返回JRuby的罐子本身,这种情况是有道理的,因为逻辑确实是从该罐子中评估/执行的。例如:

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,但这可以,如果你使用​​很容易地适应)在src/java/org/rubyforge/rawr创建一个Java类:

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 
+0

太棒了!有没有办法做到这一点没有_any_ java代码? – Jwosty 2012-03-16 23:30:47

+0

我添加了我的JRuby尝试,但可能会得心应手,但无法让他们真正返回您所期望的。 – 2012-03-17 08:06:50

+0

好吧,这就够了!另外,'to_java'部分是我正在寻找的;我找不到如何调用Java对象上定义的方法。谢谢! – Jwosty 2012-03-17 17:50:51

0

想通了没有用java

def get_jar_path 
    scriptpath = __FILE__[/(.*)\/.+\.jar!/] 
    $1[6..-1] 
end