2010-02-15 79 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文件的任何其他寶石。