JRubyのコードをexeファイルにする方法とMacの.app形式にする方法

JavaとかJRubyはインストールしておいてください。
やり方は省略です。

rawrをインストールします

私はMatzRubyがメインなので、jruby -Sでgemやrakeを操作します。
gemとかrakeとか打つと、MatzRubyが起動してしまいますので。

jruby -S gem install rawr

rawr-1.1.2のgemパッケージにはjruby_fetch.rbの入れ忘れがあるので、
rawr-1.1.2/libのディレクトリにwgetで入れてしまいます。
http://gitorious.org/projects/rawr
からとって来てください。

wget http://gitorious.org/projects/ 途中省略 /lib/jruby_fetch.rb

実行するスクリプトを用意します

rubyの実行ファイルはmain.rbという名前にし、
lib/rubyに入れておきます。
とりあえず、以下をmain.rbと言う名前で保存しましょう。

#!/usr/bin/env jruby
require 'java'
import 'javax.swing.JFrame'
import 'javax.swing.JButton'
frame=JFrame.new
button=JButton.new("Click Me")
frame.default_close_operation=(JFrame::EXIT_ON_CLOSE)
frame.content_pane.add(button)
frame.set_size(300,300)
frame.visible=(true)

また、jruby.jarが必要なので、
jruby-1.1.6/lib/jruby.jarをコピーしておきます。

mkdir jikken
cd jikken
mkdir -p lib/ruby
mkdir -p lib/jruby
mv ~/main.rb lib/ruby
cp ~/local/jruby-1.1.6/lib/jruby.jar lib/jruby

作成します

作業ディレクトリへrawrのインストール

jruby -S rawr install

rakeのtask一覧を見てみましょう

% jruby -S rake -T
(in /Volumes/xibbar/jruby/rawr)
rake rawr:build_data_jars           # Build all data jars
rake rawr:bundle:app                # Bundles the jar from rawr:jar into a ...
rake rawr:bundle:exe                # Bundles the jar from rawr:jar into a ...
rake rawr:clean                     # Removes generated content
rake rawr:compile                   # Compiles all the Java source and Ruby...
rake rawr:compile_duby_classes      # Compiles the Duby source files specif...
rake rawr:compile_java_classes      # Compiles the Java source files specif...
rake rawr:compile_ruby_classes      # Compiles the Ruby source files specif...
rake rawr:get:current-jruby         # Fetch the most recent build of  jruby...
rake rawr:get:current-stable-jruby  # Fetch the most recent stable jruby-co...
rake rawr:jar                       # Uses compiled output and creates an e...
rake rawr:load_configuration        # Loads data from the build_configurati...
rake rawr:prepare                   # Creates the output directory and sub-...

パッケージング用のディレクトリを作成します。

jruby -S rake rawr:build_data_jars

Windowsの実行形式であるexeファイルを作成

特にコンフィグは何もしなくてもいけるはず。exeを作成します。

jruby -S rake rawr:bundle:exe

これでpackage/windowsの中にファイルがいくつかできます。

% ls -l package/windows 
total 80
-rwxr-xr-x  1 fujioka  staff  25600 Dec 20 22:28 ChangeMe.exe
-rw-------  1 fujioka  staff   7212 Dec 20 22:28 ChangeMe.jar
-rw-r--r--  1 fujioka  staff    879 Dec 20 22:28 configuration.xml
drwxr-xr-x  3 fujioka  staff    102 Dec 20 22:28 lib

実体はjarファイルとlibにあるjruby.jarですね。
これらのファイル全部必要です。人に提供するときは、
いいから入れろと説明しましょう。^^;
実行するにはjavaをインストールしてもらい、これらのファイルのみで実行できます。
ただ、jarのダブルクリックでも行けるので、exeは必要ないかもしれんとか思いました。

Macの実行形式である.appディレクトリを作成

exeファイルができているはずなので、簡単です。

jruby -S rake rawr:bundle:app

すると、ディレクトリができます。

ls -l package/osx 
total 0
drwxr-xr-x  3 fujioka  staff  102 Dec 20 22:26 ChangeMe.app

Finderから覗いてみて、ダブルクリックで起動します。
なんだか、jrubyでもスマートなプログラムを書けそうな気がしますね。
これだと、javaをインストールしてもらいさえすれば、
rubyマルチプラットフォームGUIアプリを人に提供できますね。
いい感じです。
かっこいい!!

設定を編集しよう

build_configuration.rbが設定ファイルのはずなので、ここを編集すると、
ChangeMeから任意の名前に変えたりできるはず。