Получить JRuby Jar Path - PullRequest
       10

Получить JRuby Jar Path

3 голосов
/ 16 марта 2012

Подобно этому вопросу, я хотел бы знать, как получить путь к текущему файлу JAR. Но в отличие от другого вопроса, я хочу знать путь jar , а не путь текущего файла внутри jar. Например, скажем, у меня был jruby jar в "/Users/MyUser/Jars/foo.jar", а внутри был скомпилированный рубиновый файл в "foo.jar / java / style / class / path.class". Как class.path может получить путь "/Users/MyUser/Jars/foo.jar"?

Я также видел способ сделать это в Java , но я просто не знаю, как его перевести ...

Ответы [ 2 ]

2 голосов
/ 16 марта 2012

Я немного поэкспериментировал с этим, и любая попытка вызвать код из JRuby возвращает сам jarby 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) - это создать класс 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
0 голосов
/ 21 августа 2013

Разобрался без использования Java

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