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?
Trả lời
Để 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.
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.
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.
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âu hỏi này có thể giúp: http://stackoverflow.com/questions/1921475/compile-jruby-hello-world-problem – atomicules
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). –