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