Создать развертываемый JAR-файл JRuby? - PullRequest
23 голосов
/ 16 февраля 2010

Мне нужно скомпилировать мое приложение JRuby в отдельный файл JAR. Как я могу это сделать?

Ответы [ 4 ]

22 голосов
/ 22 апреля 2011

Славка 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 в текущем каталоге. Согласно README вы просто добавляете все необходимые библиотеки в каталог lib и используете либо (или оба) .gemspec или Gemfile для управления любыми другими драгоценными камнями, которые необходимо поместить в файл .jar .

4 голосов
/ 03 марта 2010

Выезд rawr .Это гем, который упаковывает ваше приложение в JAR-файл.

Если вы хотите скомпилировать для защиты исходного кода, вы должны создать файл .class для каждого скрипта в вашем проекте (как описано здесь ) и затем замените содержимое исходного сценария на

require 'the_corresponding_class_file'

для каждого из скомпилированных сценариев.

2 голосов
/ 04 апреля 2011

JRuby 1.6 улучшил это. Теперь есть раздел вики - StandaloneJarsAndClasses - в котором рассказывается, как использовать jrubyc для создания файлов .class и автономных jar-файлов.

С новым компилятором вы можете создавать файлы .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.

1 голос
/ 16 февраля 2010

Чтобы просто запустить скрипт:

На сайте JRuby есть исполняемый файл JAR, который вы можете получить на странице загрузки JRuby . Вам нужен полный JAR-файл JRuby. Затем вы можете запустить приложение, выполнив

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

Полагаю, вы также можете собрать тот же JAR-файл из исходного кода. В скачанном источнике делай

ant --projecthelp

Чтобы полностью встроить скрипт Ruby в файл JAR: Встраивание JRuby в Java является хорошей отправной точкой. Возможно, вы захотите разархивировать файл jruby-complete.jar, добавить свой основной класс Java, который либо имеет выноску к скрипту JRuby, либо имеет встроенный код Ruby, заменить основной класс манифеста, чтобы он указывал на вашу новую точку входа, и встряхните.

...