2012-03-16 18 views
3

this質問と同様に、現在のjarファイルのパスを取得する方法を知りたいと思います。しかし、他の質問とは異なり、のジャーのパスではなく、現在のファイルのパスではありません。 jar。たとえば、 "/Users/MyUser/Jars/foo.jar"にjruby jarがあり、内部に "foo.jar/java/style/class/path.class"というコンパイル済みのルビファイルがあるとします。どのようにclass.pathが "/Users/MyUser/Jars/foo.jar"というパスを得ることができましたか? 、JRuby jarパスを取得する

は、私はまたa way to do it in Java見ましたが、私はちょうどそれを翻訳する方法がわからない...

答えて

2

私はこのビットを試してきたが、そしてJRubyのからコードを呼び出すしようとすると、JRubyの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していますが、​​を使用している場合、これは容易に適合させることができる)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

+0

便利なJRubyの試行を追加しましたが、期待していたものを実際に返すことができませんでした。 –

+0

申し訳ありませんが、これで十分です!また、 'to_java'は私が探していたものの一部です。 JavaのObjectで定義されたメソッドを呼び出す方法が見つかりませんでした。ありがとう! – Jwosty

0

は、java

def get_jar_path 
    scriptpath = __FILE__[/(.*)\/.+\.jar!/] 
    $1[6..-1] 
end 
を使用せずにそれを考え出しました10
関連する問題