jruby中的getProtectionDomain()在哪里?

时间:2010-12-22 21:57:22

标签: jruby

我有一个Java员工类,我可以使用以下代码获取加载它的磁盘上的位置:

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

在一个犹豫不决的jirb会话中,我尝试了以下内容:

Staff.getProtectionDomain()

和(编辑)

Staff.class.getProtectionDomain()

两者都找不到方法:undefined方法`getProtectionDomain'

这个方法是否被jruby掩盖,若然,我怎么称呼它?

[edit]我正在使用jruby 1.5.6。

3 个答案:

答案 0 :(得分:1)

在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"

此外,请参阅此相关信息的其他帖子:Get JRuby jar path

答案 1 :(得分:0)

我认为它应该是jruby中的Staff.class.getProtectionDomain()。

答案 2 :(得分:0)

所以这里有几个问题(至少它们适合我)。

1)你不能使用类似Staff.class的常量来获取java类 - 这将返回ruby Class对象。

2)一旦你有了一个java实例,你只能使用getClass()方法得到它的java.lang.Class。再次调用类会从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()