0

一度に 1 つのコンポーネントを移行できるように、JRuby と Java アプリケーションのハイブリッドを作成しようとしています。私が今やろうとしていることは非常に単純です。ここに Ruby クラスがあります: require 'java'

java_package 'eu.netprophecy.test'

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

ZK プロジェクトからこのビュー モデルを使用できるようにしたい:

<?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>

でjarを作成しようとしましたmarblerが、プロジェクト名が前にあるディレクトリにJavaバイトコードを含む.classファイルを配置し、予想されるパッケージ構造を台無しにします(この場合、EJB/eu/netprophecy/test/RubyViewModelを取得します)これは、生成された Java クラスを Java コードで使用できないことを意味します)。

これが可能かどうか、それを行うためのより良い方法があるかどうか、またはjarを手動で作成する必要があるかどうかは誰にもわかりますか?

4

1 に答える 1

0

Ruby クラスから Java クラスを生成する必要があります。これは、(事前コンパイルなしでも) 完全に可能become_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

次を使用して、メソッドが存在することを確認できます(Javaの方法):

RubyViewModel.java_class.getDeclaredMethods.map { |method| method.to_s }
于 2012-05-31T18:53:36.097 に答える