2010-02-15 78 views
23

我需要将我的JRuby应用程序编译为独立的JAR文件。我怎样才能做到这一点?创建可部署的JRuby JAR文件?

+0

这个问题可能会有所帮助:http://stackoverflow.com/questions/1921475/compile-jruby-hello-world-problem – atomicules 2010-02-16 12:49:19

+0

这个问题与编译和执行(J)Ruby脚本有关,而不是与Jar包装(部署)。 – 2013-12-02 12:15:45

回答

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代码,替换清单的主类以指向新的入口点,然后将它备份。

4

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

如果你想编译源代码保护,你必须出示.class文件为每个脚本在您的项目(如描述here),然后用

require 'the_corresponding_class_file' 

为每个替换原始脚本的内容编译的脚本。

2

JRuby 1.6改进了这一点。现在有一部分wiki - StandaloneJarsAndClasses - 讲述如何使用jrubyc来生成.class文件和独立的jar。

有了新的编译器,你可以建立.class文件就像从维基这个例子:

 
[email protected]:/tmp/fnx$ cat my_foo.rb 
class Foo 
    def bar(a, b) 
    puts a + b 
    end 
end 
[email protected]:/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 
[email protected]:/tmp/fnx$ ls 
Foo.class Foo.java my_foo.rb 
[email protected]:/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 {}; 
} 

,你可以设置入口点的广口瓶中,org.jruby.JarBootstrapMain并添加JAR-引导.rb文件。

22

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

快速指示。确保您使用JRuby`s宝石等在这里:

$ 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文件的任何其他宝石。