我需要将我的JRuby应用程序编译成一个独立的JAR文件。我怎么能这样做?
答案 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代码,替换清单的主类指向你的新入口点,并将其备份。