Где находится getProtectionDomain () в jruby? - PullRequest
0 голосов
/ 23 декабря 2010

У меня есть класс персонала в Java, и я могу получить местоположение на диске, куда оно было загружено, используя следующий код:

Staff.class.getProtectionDomain().getCodeSource().getLocation();

В сеансе jruby jirb я попытался сделать следующее:

Staff.getProtectionDomain()

и (edit)

Staff.class.getProtectionDomain()

, оба из которых не могут найти метод: undefined метод `getProtectionDomain '

Этот метод маскируется jruby, и если да, то какЯ это называю?

[править] Я использую jruby 1.5.6.

Ответы [ 3 ]

1 голос
/ 23 февраля 2016

В jruby вы должны использовать #protection_domain() - который существует и работает как положено - вместо getProtectionDomain() - который существует, но не работает должным образом.

Для полноты вот краткий пример:

# use this to get the jruby-complete.jar file
a_java_class = self.to_java.java_class
  #=> class org.jruby.RubyObject
a_java_class.protection_domain.code_source.location.path
  #=> "/C:/Users/xxx/yyy/jruby-complete-9.0.4.0.jar"


# use this to get the file path to the commons-lang3-3.4.jar
require_relative 'java_lib/commons-lang3-3.4.jar'
a_java_class = Java::org.apache.commons.lang3.SystemUtils.java_class
  #=> class org.apache.commons.lang3.SystemUtils
a_java_class.protection_domain.code_source.location.path
  #=>"/C:/Users/xxx/yyy/zzz/java_lib/commons-lang3-3.4.jar"

Также смотрите этот пост с соответствующей информацией: Получить JRuby jar path

0 голосов
/ 18 января 2011

Итак, здесь есть пара ошибок (по крайней мере, для меня).

1) Вы не можете получить класс Java, используя Constant, как Staff.class - это вернет объект класса ruby..

2) Получив экземпляр java, вы можете получить его только java.lang.Class, используя метод getClass ().Вызов класса с снова даст вам объект класса из иерархии ruby.

x = Java::java.lang.String.new("hi")
x.class.kind_of?(Java::java.lang.Class)  # evaluates to false
x.getClass().kind_of?(Java::java.lang.Class)  # evaluates to true

так что мне просто нужно иметь экземпляр Staff (в моем примере в вопросе), например:

Staff.new.getClass().getProtectionDomain()
0 голосов
/ 23 декабря 2010

Я считаю, что это также должен быть Staff.class.getProtectionDomain () в jruby.

...