创建可部署的JRuby JAR文件?

时间:2010-02-15 21:47:46

标签: jruby executable-jar

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

4 个答案:

答案 0 :(得分:22)

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

快速说明。确保你在这里使用JRuby的宝石等:

$ 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文件。根据{{​​1}},您只需在README目录中添加所需的任何库,并使用lib.gemspec中的任意一个(或两者)来控制需要的任何其他宝石被放入Gemfile文件。

答案 1 :(得分:4)

结帐rawr。它是一个将您的应用程序打包在JAR文件中的gem。

如果要编译源代码保护,则必须为项目中的每个脚本生成.class文件(如here所述),然后用

require 'the_corresponding_class_file'

用于每个已编译的脚本。

答案 2 :(得分:2)

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

使用新编译器,您可以从wiki:

构建类似此示例的.class文件
james@gealach:/tmp/fnx$ cat my_foo.rb 
class Foo
   def bar(a, b)
     puts a + b
   end
 end
james@gealach:/tmp/fnx$ ~/jruby/bin/jrubyc --javac my_foo.rb 
Generating Java class Foo to 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
james@gealach:/tmp/fnx$ ls
Foo.class  Foo.java  my_foo.rb
james@gealach:/tmp/fnx$ javap.exe Foo
Compiled from "Foo.java"
public class Foo extends org.jruby.RubyObject{
    public static org.jruby.runtime.builtin.IRubyObject __allocate__(org.jruby.Ruby, org.jruby.RubyClass);
    public Foo();
    public java.lang.Object bar(java.lang.Object, java.lang.Object);
    static {};
}

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

答案 3 :(得分: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代码,替换清单的主类指向你的新入口点,并将其备份。