Cygwin で Rhino
E4X をやってみたくて Rhino を入れてみた。
インストール
- Rhino - Java による JavaScript から Rhino のバイナリ(rhino1_6R5.zip)をダウンロードして展開
- E4X 用に Apache Download Mirrors - The Apache Software Foundation から xmlbeans-2.2.0.zip をダウンロードして展開
展開するフォルダは適当に。(オイラはD:\usr\java 以下にした)
必要な jar ファイルは$JAVA_HOME/lib/ext に入れて置いて自動で読み込まれるようにするのが手っ取り早いがアップデートする度に置きなすのは面倒なのでやらずに、-classpathオプションで読み込むようにする。
あと、java -jar js.jarと-jarオプションで起動すると-classpathオプションやCLASSPATH環境変数が上書きされてしまうので注意。
Cygwin 用に起動スクリプト
意外と長くなってしまった。JAVA 自体は Windows 用なのでパスの設定が面倒なのだ。
コマンドライン引数の設定に不具合があったので一部修正#!/bin/bash RHINO_JAR="/d/usr/java/rhino1_6R5/js.jar" XMLBEANS_LIB="/d/usr/java/xmlbeans-2.2.0/lib" CLASSPATH=".;$( /usr/bin/cygpath -wa ${RHINO_JAR} )" if [ -n ${JAVA_HOME} ];then JAVA_HOME="$( /usr/bin/cygpath -ua ${JAVA_HOME} )" else JAVA_HOME="/opt/jre1.5.0_09" fi export JAVA_HOME java="${JAVA_HOME}/bin/java" # set and export CLASSPATH {{{ if [ -d ${XMLBEANS_LIB} ];then for cp in $( /usr/bin/cygpath -da ${XMLBEANS_LIB}/*.jar );do CLASSPATH="${CLASSPATH};${cp}" done else echo "Not support ECMAScript for XML." fi export CLASSPATH # }}} # Convert Windows Path {{{ declare -a ARGV typeset -i ARGC=0 for arg in "$@" do if [ "${arg}" = "-d" ];then RHINO_DEBUG=1 elif [[ "${arg}" != -* && -e "${arg}" ]];then ARGV[ARGC]="$( /usr/bin/cygpath -da ${arg} )" else ARGV[ARGC]="${arg}" fi (( ARGC++ )) done # }}} # Debug message {{{ if [ ${RHINO_DEBUG} = 1 ];then "${java}" -version echo "=== CLASSPATH ===" echo "${CLASSPATH}" | tr ';' '\n' echo "=== Arguments ===" for arg in "${ARGV[@]}";do echo "${arg}" done exit 1 fi # }}} # execute "${java}" org.mozilla.javascript.tools.shell.Main "${ARGV[@]}" # vim:set sw=2 ts=2 sts=0 fdm=marker:
rhino というファイル名で保存。
実行
$ rhino -d
=== Debug mode ===
java version "1.6.0_01"
Java(TM) SE Runtime Environment (build 1.6.0_01-b06)
Java HotSpot(TM) Client VM (build 1.6.0_01-b06, mixed mode, sharing)
=== CLASSPATH ===
.
d:\usr\java\rhino1_6R5\js.jar
d:\usr\java\XMLBEA~1.0\lib\JSR173~1.JAR
d:\usr\java\XMLBEA~1.0\lib\resolver.jar
d:\usr\java\XMLBEA~1.0\lib\xbean.jar
d:\usr\java\XMLBEA~1.0\lib\XBEAN_~1.JAR
d:\usr\java\XMLBEA~1.0\lib\XMLPUB~1.JAR
$ cat ~/jstest
print('Hello World !')
$ rhino -f ~/jstest
Hello World !
$ rhino
Rhino 1.6 release 5 2006 11 18
js> print('Hello World !')
Hello World !
js> var a = <root>
<x name="hoge">10</x>
<y>20</y>
<x>400</x>
</root>
js> a
<root>
<x name="hoge">10</x>
<y>20</y>
<x>400</x>
</root>
js> a.x
<x name="hoge">10</x>
<x>400</x>
js> for ( var i in a.x ){ print( i + ': ' + a.x[i] ) }
0: 10
1: 400
js> a.x[0]
10
js> a.x[0].@name
hoge