Это довольно легко на самом деле. Предположим, что вы можете запустить ваше приложение со всем замороженным в некотором каталоге с помощью команды:
ruby myapp.rb
Теперь вам нужно поместить этот скрипт в каталог lib вашего приложения и написать java-упаковщик, который будет загружать скрипт. Пример кода, который делает это:
package livesync;
import org.jruby.Ruby;
import org.jruby.RubyRuntimeAdapter;
import org.jruby.javasupport.JavaEmbedUtils;
import java.util.ArrayList;
public class LiveSyncRunner {
public static void main(String[] args) {
String[] jrubyArgs = new String[3 + args.length];
jrubyArgs[0] = "-e";
jrubyArgs[1] = "require 'livesync/livesync_wrapper'";
jrubyArgs[2] = "livesync";
for (int i = 0; i < args.length; ++i) {
jrubyArgs[i + 3] = args[i];
}
org.jruby.Main.main(jrubyArgs);
}
}
В приведенном выше сценарии, который я запускаю, он находится в lib / aliveync_wrapper.rb
Теперь все, что вам нужно, это правильный файл build.xml (находится в корневом каталоге)
Мой build.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project basedir="." default="dist" name="Juggernaut">
<description>Combine Ruby and Java source with the jruby-complete jar</description>
<target name="dist" description="Create the deliverable jar">
<taskdef name="jarjar"
classname="com.tonicsystems.jarjar.JarJarTask"
classpath="vendor/jarjar-1.0rc7.jar"/>
<mkdir dir="pkg"/>
<jarjar destfile="pkg/livesync.jar">
<manifest>
<attribute name="Main-Class" value="livesync.LiveSyncRunner"/>
</manifest>
<fileset dir="classes"/>
<zipfileset dir="vendor/gems" prefix="vendor/gems"/>
<zipfileset src="vendor/jruby-complete-1.1.2.jar" />
</jarjar>
</target>
</project>
Вещи, которые вам, возможно, придется изменить здесь:
- название Main-Class - это должно
имя твоей Java-оболочки
(загрузка скрипта ruby)
- добавить / удалить некоторые zipfilesets
Вам также необходимо включить файлы jruby-complete-1.1.2.jar и jarjar-1.0rc7.jar в каталог поставщика. Вы должны погуглить их без проблем.
После этого вы просто идете в корневой каталог и запускаете ant. После этого вы можете запустить свой скрипт с
java -jar pkg/livesync.jar args1 agrs2 ...
Надеюсь, это поможет!