【问题标题】:Create deployable JRuby JAR file?创建可部署的 JRuby JAR 文件?
【发布时间】:2011-01-17 04:05:44
【问题描述】:

我需要将我的 JRuby 应用程序编译成一个独立的 JAR 文件。我该怎么做?

【问题讨论】:

标签: jruby executable-jar


【解决方案1】:

只运行一个脚本:

JRuby 站点有一个可运行的 JAR 文件,您可以从 JRuby download page 获得。您想要 JRuby 完整的 JAR 文件。然后,您可以通过

运行您的应用程序
java -jar jruby-complete-1.4.0.jar <script>

我相信您也可以从源代码构建相同的 JAR 文件。在下载的源代码中做

ant --projecthelp

要将 Ruby 脚本完全嵌入到 JAR 文件中:Embedding JRuby in Java 是一个很好的起点。您可能想要解压 jruby-complete.jar 文件,添加您的 Java 主类,该类具有对 JRuby 脚本的标注或嵌入了 Ruby 代码,替换清单的主类以指向您的新入口点,然后把它备份起来。

【讨论】:

    【解决方案2】:

    查看rawr。它是将您的应用程序打包到 JAR 文件中的 gem。

    如果您想编译以保护源代码,您必须为项目中的每个脚本生成一个.class 文件(如here 所述),然后将原始脚本的内容替换为

    require 'the_corresponding_class_file'
    

    对于每个已编译的脚本。

    【讨论】:

      【解决方案3】:

      JRuby 1.6 对此进行了改进。现在有一个 wiki 部分 - StandaloneJarsAndClasses - 讨论如何使用 jrubyc 生成 .class 文件和独立 jar。

      使用新的编译器,您可以从 wiki 构建 .class 文件,如下例所示:

      james@gealach:/tmp/fnx$ cat my_foo.rb Foo 类 定义栏(a,b) 把 a + b 结尾 结尾 james@gealach:/tmp/fnx$ ~/jruby/bin/jrubyc --javac my_foo.rb 生成 Java 类 Foo 到 C:/cygwin/tmp/fnx/Foo.java javac -d C:/cygwin/tmp/fnx -cp C:/cygwin/home/james/jruby/lib/jruby.jar;。 C:/cygwin/tmp/fnx/Foo.java 詹姆斯@gealach:/tmp/fnx$ ls Foo.class Foo.java my_foo.rb james@gealach:/tmp/fnx$ javap.exe Foo 编译自“Foo.java” 公共类 Foo 扩展 org.jruby.RubyObject{ 公共静态 org.jruby.runtime.builtin.IRubyObject __allocate__(org.jruby.Ruby, org.jruby.RubyClass); 公共 Foo(); public java.lang.Object bar(java.lang.Object, java.lang.Object); 静止的 {}; }

      您可以将 jar 的入口点设置为 org.jruby.JarBootstrapMain 并添加一个 jar-bootstrap.rb 文件。

      【讨论】:

        【解决方案4】:

        Warbler 1.3.0 或更高版本也可用于制作可执行 JAR 文件。

        快速说明。确保您在此处使用 JRuby 的 gem 等:

        $ gem install warbler
        $ mkdir bin
        $ cat <<EOF > bin/myapp
        #!/usr/bin/env jruby
        
        puts "Hello World"
        
        EOF
        $ chmod a+x bin/myapp
        $ warble jar
        

        您现在应该在当前目录中有一个myapp.jar 文件。根据README,您只需在lib 目录中添加所需的任何库,并使用.gemspecGemfile 中的一个(或两者)来控制需要放入.jar 文件中的任何其他gem .

        【讨论】:

          猜你喜欢
          • 2014-05-21
          • 2012-05-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-08-08
          • 1970-01-01
          • 2013-05-07
          • 1970-01-01
          相关资源
          最近更新 更多