2010-12-22 2 views
0

나는 자바에서 직원 클래스를 가지고 있고 그것이 다음 코드를 사용하여로드 된 디스크의 위치를 ​​얻을 수 있습니다 :jruby에서 getProtectionDomain()은 어디에 있습니까?

Staff.getProtectionDomain() 
: 나는 다음과 같은 시도한 JRuby에서의 jirb 세션에서

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

과 방법을 찾을 수없는 둘 (편집)

Staff.class.getProtectionDomain() 

: 정의되지 않은 메서드`getProtectionDomain '

이 방법은 jruby로 마스크 처리합니까? 그렇다면 어떻게 호출 할 수 있습니까?

[편집] jruby 1.5.6을 사용하고 있습니다.

답변

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

0

jruby의 Staff.class.getProtectionDomain()이어야한다고 생각합니다.

+1

아직도 나에게 같은 오류를 제공

완성도를 들어, 여기에 간단한 예입니다. –

+0

해결책 : 1) 직원은 jar 파일의 * java 클래스 * 여야합니다. 2) jruby에서 java 메소드'#getProtectionDomain()'을 피하고 대신 jruby의 메소드'#protection_domain()'을 사용하십시오. 마지막으로이 모든 것은 다음과 같이 풀립니다 :'Staff.java_class.protection_domain' – zipizap

0

그래서 여기에는 몇 가지 문제가 있습니다 (적어도 그들은 나를위한 것이 었습니다).

1) Staff.class와 같은 Constant를 사용하여 java 클래스를 가져올 수 없습니다.이 클래스는 Ruby Class 객체를 반환합니다.

2) 일단 Java 인스턴스가 있으면 getClass() 메소드를 사용하여 java.lang.Class 만 얻을 수 있습니다. 클래스를 다시 호출하면 루비 계층의 클래스 객체를 얻을 수 있습니다.

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.new.getClass().getProtectionDomain() 
+0

#java_class를 사용하여 새로운 인스턴스를 만들지 않고 java 클래스를 얻을 수도 있습니다 :'Java :: java.lang.String.java_class # => Java :: java .lang.String.java_class'. – zipizap

관련 문제