Let's Griffon

Grails をやっているとたまに上る話題の中に、Griffon というものがある。
Grails の考え方をGUIアプリケーション(Swing)に応用したものだ。
バージョン的には、まだ 0.1.2 というとても低いものだけど、訳あって、チャレンジしてみた。
結局のところ、Swing なわけで、Grails で WEB アプリを簡単に作るようにはいかない。
とりあえず、サンプルアプリを起動するまでのまとめ。

コンパイル済みのものもあるけど、最新ではない雰囲気があったので、SVN レポジトリから タグ 0.1.2 バージョンを取得。

習慣的なものもあり、/opt/griffon を作ってそこにインストールしていく

# svn co http://svn.codehaus.org/griffon/core/tags/GRIFFON_0.1.2 /opt/griffon/griffon-src-0.1.2

次に、環境変数設定。
MACOSXの場合、JAVA_HOME って気にしたことなかったけど、どうやら、以下のようにすれば、よいらしい。
GRIFFON_HOME も設定。.profile に、2行追加。
export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Home
export GRIFFON_HOME=/opt/griffon/griffon

そして、コンパイル。ant でコンパイルするので、ant が使える環境である必要がある。
# cd /opt/griffon/griffon-src-0.1.2
# ant install

程なく、コンパイル完了。
これで、griffon 一式が、/opt/griffon/griffon に入る。

/opt/griffon/griffon-src-0.1.2/sample に入っているサンプルを起動してみる。
# griffon run-app
このあたりは、Grails とそっくり。

で、じゃあ、配布するときはどうなのかというと、
# griffon package
としてやると、applet や、JavaWebStart 用にファイルを staging フォルダ用意してくれる。

だが、jnlp ファイルをインターネット上に配置する場合は、一手間必要。
この JWS のjnlp ファイルがローカルパスをフルパスで指定しているので、書き換えてやらなければいけない。
該当ファイルの中の最初の方にある以下の記述で、

<jnlp
version="0.1"
codebase="file:/...../griffon-hello-world/staging/"
href="application.jnlp"
<

codebase がローカルのパスで指定してある。
インターネットに jnlp を公開しても、インストールクライアント側には、それらのファイルはないわけで、起動できない。
そこで、codebase="http://xxx.xxx.xxx.xxx/..." と参照できる配置したパスに書き換えてやれば、OK。

また、JWSは、面倒というか、当然というか、すべての jar ファイルを署名して、安全ですよ宣言をしておかなければならない。

とりあえず、勝手な証明書で、署名を施す。
都度、パスワード(パスフレーズ?)を聞かれるので、証明書を作ったときに入力したパスワード(パスフレーズ)を入力する。
以下が、それらのコマンド一覧。
# keytool -genkey -keystore myKeystore -alias my
# keytool -selfcert -alias my -keystore myKeystore
# keytool -list -keystore myKeystore ← これは、確認用コマンド
# jarsigner -keystore myKeystore griffon-hello-world.jar my
# jarsigner -keystore myKeystore griffon-rt-0.1.2.jar my
# jarsigner -keystore myKeystore groovy-all-1.6.3.jar my

これで、apache ドキュメントルートなどに配置して、参照、インストール、起動ができる。
証明書っていうのは、必要な機能なのだろうけど、毎回やらなければならないので、面倒だ。

こうして起動した JWS アプリは、ローカルファイルの参照もできるし、デスクトップアプリとして利用できる。