2010-02-15 33 views
23

Tôi cần biên dịch ứng dụng JRuby của mình thành một tệp JAR độc lập. Tôi có thể làm cái này như thế nào?Tạo tệp JRuby JAR có thể triển khai?

+0

Câu hỏi này có thể giúp: http://stackoverflow.com/questions/1921475/compile-jruby-hello-world-problem – atomicules

+0

Câu hỏi đó liên quan đến việc biên dịch và thực thi tập lệnh Ruby (J) mà không phải với Jar đóng gói (triển khai). –

Trả lời

1

Để chỉ cần chạy một kịch bản:

Các trang web JRuby có một tập tin JAR Runnable mà bạn có thể có được ở các JRuby download page. Bạn muốn tập tin JAR hoàn chỉnh JRuby. Sau đó, bạn có thể chạy ứng dụng của mình bằng cách thực hiện

java -jar jruby-complete-1.4.0.jar <script> 

Tôi tin rằng bạn cũng có thể xây dựng cùng một tệp JAR từ nguồn. Trong nguồn được tải xuống làm

ant --projecthelp 

Để nhúng tập lệnh Ruby hoàn toàn vào tệp JAR: Embedding JRuby in Java là điểm khởi đầu tốt. Bạn có thể muốn mở tệp jruby-complete.jar, thêm lớp Java chính của bạn hoặc có chú thích cho tập lệnh JRuby hoặc có mã Ruby được nhúng trong đó, thay thế lớp chính của tệp kê khai để trỏ đến điểm nhập mới của bạn và bỏ nó sao lưu.

4

Khám phá rawr. Nó là một viên ngọc mà gói ứng dụng của bạn trong một tệp JAR.

Nếu bạn muốn biên dịch để bảo vệ mã nguồn, bạn phải tạo ra một tập tin .class cho mỗi kịch bản trong dự án của bạn (như mô tả here) và sau đó thay thế nội dung của kịch bản ban đầu với

require 'the_corresponding_class_file' 

cho mỗi các tập lệnh được biên dịch.

2

JRuby 1.6 cải thiện điều này. Bây giờ có một phần của wiki - StandaloneJarsAndClasses - mà nói về cách sử dụng jrubyc để tạo các tệp .class và các jars độc lập.

Với trình biên dịch mới, bạn có thể xây dựng .class file như ví dụ này từ wiki:

 
[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 
james[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 {}; 
} 

Và bạn có thể thiết lập các entrypoint cho một lọ để org.jruby.JarBootstrapMain và thêm một jar-bootstrap .rb.

22

Warbler 1.3.0 hoặc mới hơn cũng có thể được sử dụng để tạo tệp JAR có thể thực thi.

Hướng dẫn nhanh. Hãy chắc chắn rằng bạn đang sử dụng đá quý của JRuby, v.v. ở đây:

$ gem install warbler 
$ mkdir bin 
$ cat <<EOF > bin/myapp 
#!/usr/bin/env jruby 

puts "Hello World" 

EOF 
$ chmod a+x bin/myapp 
$ warble jar 

Bây giờ bạn sẽ có một tệp myapp.jar trong thư mục hiện tại. Theo số README, bạn chỉ cần thêm bất kỳ thư viện nào bạn cần vào thư mục lib và sử dụng (hoặc cả hai) .gemspec hoặc Gemfile để kiểm soát bất kỳ loại đá quý nào khác cần được đưa vào tệp .jar.

Các vấn đề liên quan