2017-11-07 24 views
0

jrubyonrails 프로젝트의 jar 파일로 Java 명령 행 응용 프로그램 (오픈 소스)을 사용하고 있습니다. 주요 응용 프로그램은 난 단지 myDesiredMethod 기능을 원하는, 내가 건너 뛰려면 여러 단계가 있습니다Java jar 파일 클래스의 protected 메소드에 액세스하는 방법

public class Decoder extends Annotator { 
    public Decoder() { 
    super(); 
    } 

    public static void main(String[] args) { 
    ... // Do something that I don't want 
    myDesiredMethod(); 
    ... // And some other thing 
    } 
... 
} 

을 다음과 같이한다. 그리고 부모 클래스의 protected 메소드입니다. 그것은이 오류가 발생

ann = Annotator.new 

: TypeError: no public constructors for Annotator

public class Annotator extends Helper { 
... 
    protected SomeClass myDesiredMethod(boolean reMap) throws Exception { ... } 
... 
} 

Annotator 클래스는 내가 할 수 없도록 공용 생성자가 없습니다.

그런 다음 myDesiredMethod에 액세스하기 위해 Annotator을 상속하는 다른 클래스를 구현하려고합니다. NoMethodError: undefined method 'myDesiredMethod' for MyModule::RuDecoder:Class :이 내가 지금까지

require 'java' 
require 'decoder.jar' 

java_import java.util.ArrayList 
java_import java.lang.StringBuilder 

module MyModule 
    class RuDecoder < Annotator 
    include_package 'com.decoder' 
    def self.my_method 
     myDesiredMethod 
    end 
end 

그것은 오류가 반환하려 한 jruby 코드입니다. jruby이 부모 클래스의 메소드를 찾지 못하는 것 같습니다.

제 경우에는 해결책이 있습니까? Java 라이브러리를 jar로 다시 작성하고 업데이트가있을 때마다 수동으로 프로그램에 넣고 싶지 않습니다.

답변

0

나는 지나치게 복잡하게 만들었다.

constructors = Annotator.java_class.declared_constructors.first 
    constructors.accessible = true 
    annotator = constructors.new_instance.to_java 

을 그리고 간단한 전화 myDesiredMethod 사용 : 나는 다음과 같은 Annotator의 기본 생성자를 호출 할 수 있습니다 annotator.myDesiredMethod