Jar 如何在JavaWeb项目中部署Ruby类

Jar 如何在JavaWeb项目中部署Ruby类,jar,jruby,zk,warbler,Jar,Jruby,Zk,Warbler,我试图在JRuby和Java应用程序之间创建一个混合体,以便一次可以迁移单个组件。我现在要做的非常简单,下面是Ruby类: 需要“java” java_package 'eu.netprophecy.test' class RubyViewModel java_signature 'String getGreeting()' def getGreeting puts "Hello, ZK, from Ruby!" end end 我希望能够从ZK项目中使用此视图模型: &

我试图在JRuby和Java应用程序之间创建一个混合体,以便一次可以迁移单个组件。我现在要做的非常简单,下面是Ruby类: 需要“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>

我尝试用
marbler
创建一个jar,但它将带有java字节码的.class文件放在一个前面有项目名称的目录中,弄乱了预期的包结构(在本例中,我得到了EJB/eu/netprophecy/test/RubyViewModel,这意味着我无法在java代码中使用生成的java类)


有人知道这是否可能,是否有更好的方法,或者我是否必须手动创建jar吗?

您需要从您的ruby类生成一个java类,这在
变成java时是完全可能的(即使没有预编译),只需确保在呈现视图(或编译视图)之前执行ruby脚本,我不确定您使用的是什么

您可以使用以下方法检查方法是否存在(java方式):


我已经有了java字节码,问题是以一种在非JRuby战争中可用的方式对其进行打包……很抱歉,您应该对您的问题进行细化,因为我不清楚,您提到:“我无法在java代码中使用类”,我想您的评论有点“复杂”在这一点上回答你要找的。如何启动嵌入式jruby容器,正确设置它以从任何地方加载脚本,然后生成字节码,确保web应用程序的类加载器看到生成的类?我还提到我用warbler创建了一个jar:“我试着用marbler创建一个jar,但是它将类放在一个目录中,项目名称放在前面,与预期的包结构不符”,但我会尝试澄清。听起来你可以使用
jrubyc--javac
预编译*.rb文件(我想,warbler可以为你做这件事).我这样做了-问题是,我是否必须手动创建JAR(使用
JAR cvf…
),或者是否有其他方法:warbler只创建可执行的JAR,这些JAR显然没有用于包含在web项目中。。。
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 }