#!/bin/bash # -*- shell-script -*- # Ver.1.3.5 : 2010.10.9 TAKAHASHI,Toru # 事前条件 # 1) 環境変数JAVA_HOMEが適切に設定されている # 例) JAVA_HOME=C:/java/jdk1.6.0 # 2) JDKの各コマンド(例:javac.exe)から.exeを除いた名前(例:javac)の # シンボリックリンクファイルが作成されている # 例) /usr/local/bin/javac -> java_wrapper # 3) JDKのコマンドへのパスよりも2)のシンボリックリンクファイルへの # パスが先に環境変数PATHに設定されている # # 本スクリプトでシンボリックリンク作成を行うこともできます。 # $ java_wrapper createsymlinks # カレントディレクトリに2)のシンボリックリンクを作成します。 # レジストリからJDKがインストールされているパスを取得する関数 function get_jdkpath_from_registory() { java_ver=$(regtool get "/machine/SOFTWARE/JavaSoft/Java Development Kit/CurrentVersion") if [[ $java_ver ]]; then javahome=$(regtool get "/machine/SOFTWARE/JavaSoft/Java Development Kit/$java_ver/JavaHome") if [[ $javahome ]]; then JAVA_HOME=$(cygpath "$javahome") return 1 fi fi return 0 } # Java系コマンドのうち標準コマンドラインオプションを持つコマンドの # コマンドライン引数のパスをCygwin形式からWindows形式に変換する関数 function general_parse_arg() { while case $# in 0) false;; 1) true;; esac do arg="$1"; shift case $arg in -classpath | -cp | -sourcepath | -bootclasspath | -extdirs | -endorseddirs) ARGS="$ARGS $arg" if [[ ( ! "$1" = "" ) && ( ! ${1:0:1} = "-" ) ]]; then ARGS="$ARGS `cygpath -p -w -s $1`" shift fi ;; -d | -s | -jar) ARGS="$ARGS $arg" if [[ ( ! "$1" = "" ) && ( ! ${1:0:1} = "-" ) ]];then ARGS="$ARGS `cygpath -ws $1`" shift fi ;; *) ARGS="$ARGS $arg" ;; esac done } # # スクリプトのmain処理部 # if [[ -z "$JAVA_HOME" ]]; then echo "JAVA_HOME not defined, search from registory." get_jdkpath_from_registory if [[ $? -eq 0 ]]; then echo "cannot find JDK in registory." exit 1; fi echo "Found JDK in $JAVA_HOME" fi WIN32JDKDIR=`cygpath "$JAVA_HOME"` CMD=`basename $0 .exe` PROGRAM=$WIN32JDKDIR/bin/$CMD # シンボリックリンク作成処理 if [[ "$1" = "createsymlinks" ]]; then for command in `/bin/ls "$JAVA_HOME"/bin/*.exe`; do ln -s $0 `basename $command .exe` done exit 0; fi if [[ ! -e "$PROGRAM" ]]; then echo "$PROGRAM not found." exit 1; fi if [[ -n "$CLASSPATH" ]]; then CLASSPATH=`cygpath -p -w "$CLASSPATH"` fi ARGS="" # 標準コマンドラインオプションを持つものは、general_parse_arg関数に # 処理を委ねる。標準コマンドラインオプションに従わないコマンドは # 個別に引数処理を実施する。 case $CMD in jar) #コマンドライン処理がうまく書けないので暫定オリジナルコマンドを呼び出し #$PROGRAM $* # 実験 # cygpathがパス文字列以外だと入力文字列をそのまま返すことを利用し # -で始まるオプション以外を全てcygpathに通してしまう for arg in $*; do case $arg in -*) ARGS="$ARGS $arg" ;; *) ARGS="$ARGS `cygpath -w $arg`" ;; esac done ;; *) general_parse_arg $* ;; esac #echo CLASSPATH=$CLASSPATH CMD=$CMD PROGRAM=$PROGRAM ARGS=$ARGS exec "$PROGRAM" $ARGS