2012-05-21 3 views
0

JRuby와 Java 응용 프로그램간에 하이브리드를 만들려고하므로 한 번에 하나의 구성 요소 만 마이그레이션 할 수 있습니다. 내가 지금 당장하려고하는 것은 정말 간단합니다, 여기에 루비 클래스입니다 :Java 웹 프로젝트에 Ruby 클래스를 배포하는 방법

<?page title="Hello, Ruby!" contentType="text/html;charset=UTF-8"?> 
<zk> 
<window title="Hello Ruby!!" border="normal" width="200px"  apply="org.zkoss.bind.BindComposer" 
    viewModel="@id('vm') @init('eu.netprophecy.test.RubyViewModel')"> 

<label value="@load(vm.greeting)"/> 

</window> 
</zk> 
: 은 '자바'나는 ZK 프로젝트에서이보기 모델을 사용할 수 있도록하려면

java_package 'eu.netprophecy.test' 

class RubyViewModel 
    java_signature 'String getGreeting()' 
    def getGreeting 
    puts "Hello, ZK, from Ruby!" 
    end 
end 

을 필요로

marbler으로 jar 파일을 만들려고했는데 프로젝트 이름이 앞에있는 디렉토리에 java 바이트 코드가있는 .class 파일을 넣고 예상되는 패키지 구조를 뒤범벅합니다 (이 경우 EJB/eu/netprophecy/test를 얻습니다)./RubyViewModel, 이는 Java 코드에서 생성 된 Java 클래스를 사용할 수 없음을 의미합니다).

더 나은 방법이 있다면 누구나 알 수 있습니까? 아니면 수동으로 항아리를 만들어야합니까?

답변

0

become_java!을 사용하여 완벽하게 (미리 컴파일하지 않고도) 가능한 Java 클래스를 생성해야합니다. 뷰가 렌더링되기 전에 루비 스크립트가 실행되는지 확인하십시오. 당신이 사용하고있는 것).

class RubyViewModel 
    java_signature 'String getGreeting()' 
    def getGreeting 
    puts "Hello, ZK, from Ruby!" 
    end 
end 

require 'jruby/core_ext' 
RubyViewModel.become_java! # returns a java.lang.Class 

당신이 방법을 확인할 수있는 사용 (자바 방법)이 : 이미 자바 바이트 코드를

RubyViewModel.java_class.getDeclaredMethods.map { |method| method.to_s } 
+0

문제가 아닌 JRuby를 내 사용할 수있는 방법으로 그것을 포장입니다 전쟁 ... – Kjir

+0

미안하지만, 당신이 말한대로 나에게 명확한 방법으로 질문을 세련 했어야했다 : "자바 코드에서 클래스를 사용할 수 없다" 나는 당신의 의견으로 생각한다. 이 시점에서 당신이 찾고있는 것에 답하기 위해 "복잡합니다". 임베디드 jruby 컨테이너를 부팅하고, 패키지를 패키징 한 곳마다 스크립트를로드하도록 설정 한 다음 바이트 코드를 생성하고 웹 응용 프로그램의 클래스 로더가 생성 된 클래스를 확인하는지 확인하십시오. – kares

+0

나는 또한 얼간이가있는 항아리를 만들었다 고 언급했다. "marbler로 항아리를 만들려고 시도했지만 프로젝트 이름이있는 디렉토리에 클래스를 배치하여 예상되는 패키지 구조를 엉망으로 만들었습니다." 하지만 나는 . – Kjir