Rhino実行環境構築からJavaのcommons-langライブラリを呼び出してみる
以下のフレームワークを使用した開発が一段落した。
次の案件の調査開始。
intra-mart というサーバサイドJavaScriptのパッケージカスタマイズ。
クライアントサイドもJavaScriptでゴリゴリコーディング。
いっそ開発支援用のスクリプトもJavaScriptで書いてしまおうとRhinoをセットアップ。
セットアップ
Rhino のダウンロード から、Rhinoのパッケージをダウンロード。
解凍したフォルダ内のjs.jarを適当な場所に置くのだが、Groovyに似せて ~/.rhino/lib
に配置してみた。
加えてパスの通った場所に以下のようなBashスクリプトを配置。
rhino
$ echo <<'EOF' >rhino
#!/usr/bin/env bash
libs=""
for f in $(\ls ~/.rhino/lib/*.jar); do
libs=$libs:$f
done
java -cp $libs org.mozilla.javascript.tools.shell.Main "${@}"
EOF
$ chmod 755 rhino
実行
早速実行してみる。
test1.js
#!/usr/bin/env rhino
print('test')
# 先程作成した `rhino` スクリプトの引数にJavaScriptファイルを渡すと実行可能
$ rhino test1.js
test
# 実行権限を付与すれば、ファイルを指定して実行可能
$ chmod 700 ./test1.js
$ ./test1.js
test
おお!思った以上に実行速度が早くてびっくりした。
commons-lang
を呼んでみる。
commons-lang
も呼んでみる。
- まずはjarをダウンロード
- ゲットした
commons-lang-2.4.jar
を~/.rhino/lib
ディレクトリに配置 - 以下のようなスクリプトを作成し、実行してみる。
test2.js
#!/usr/bin/env rhino
importPackage(Packages.org.apache.commons.lang)
var list = ['1', '2', '3']
var text = StringUtils.join(list, ':')
print(text)
$ rhino test2.js
1:2:3
$ chmod 700 ./test2.js
$ ./test2.js
1:2:3
あ、結構いいかも。気に入ってきた。
test3.js
#!/usr/bin/env rhino
importPackage(Packages.org.apache.commons.lang)
var list = [1, 2, 3]
list.each = function (f) {
for (var i = 0; i < list.length; i++) f(list[i])
}
list.each(function (el) {
print("[" + StringUtils.center(el * 2, 10) + "]")
})
# スペース10文字の中央に表示される
$ ./test3.js
[ 2 ]
[ 4 ]
[ 6 ]
追記
~/.rhino/lib
にjarファイルを置いていないときは早い。ここに配置するjarファイルが増えるごとにかなりもっさりしてくる。
Groovyの重さも同じような原因か?
ディスカッション
コメント一覧
まだ、コメントがありません