Commits

Zemian Deng committed 50ec84d

Improved run-java to be shorter and more portable.

Comments (0)

Files changed (1)

timemachine-scheduler/bin/run-java

 #!/usr/bin/env bash
 #
 # Copyright 2012 Zemian Deng
-# 
+#
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at
-# 
+#
 #    http://www.apache.org/licenses/LICENSE-2.0
-# 
+#
 # Unless required by applicable law or agreed to in writing, software
 # distributed under the License is distributed on an "AS IS" BASIS,
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # A wrapper script that run any Java application in unix/cygwin bash env.
 #
 # This script is assumed to be located in an application's "bin" directory. It will
-# auto resolve its directory location relative to the application path (which is one 
-# parent up from the script.) Therefore, this script can be run any where in the file 
+# auto resolve its directory location relative to the application path (which is one
+# parent up from the script.) Therefore, this script can be run any where in the file
 # system and it will still reference the same application directory.
 #
 # This script will by default auto setup a Java classpath that picks up any "config"
-# and "lib" directories under the application directory. It also will also add a 
-# any typical Maven project output directories such as "target/test-classes", 
-# "target/classes", and "target/dependency" into classpath. This can be disable by 
+# and "lib" directories under the application directory. It also will also add a
+# any typical Maven project output directories such as "target/test-classes",
+# "target/classes", and "target/dependency" into classpath. This can be disable by
 # setting RUN_JAVA_NO_AUTOCP=1.
 #
 # If the "Default parameters" section bellow doesn't match to user's env, then user
-# may override these variables in their terminal session or preset them in shell's 
-# profile startup script. The values of all path should be in cygwin/unix path, 
+# may override these variables in their terminal session or preset them in shell's
+# profile startup script. The values of all path should be in cygwin/unix path,
 # and this script will auto convert them into Windows path where is needed.
 #
 # User may customize the Java classpath by setting RUN_JAVA_CP, which will prefix to existing
 # classpath, or use the "-cp" option, which will postfix to existing classpath.
-# 
+#
 # Usage:
 #   run-java [java_opts] <java_main_class> [-cp /more/classpath] [-Dsysprop=value]
 #
 
 # Auto setup applciation's Java Classpath (only if they exists)
 if [ -z "$RUN_JAVA_NO_AUTOCP" ]; then
-	if $CYGWIN; then
-		# Provide Windows directory conversion
-		JAVA_HOME_WIN=$(cygpath -aw "$JAVA_HOME")
-		APP_DIR_WIN=$(cygpath -aw "$APP_DIR")
-
-		if [ -d "$APP_DIR_WIN\config" ]; then RUN_JAVA_CP="$RUN_JAVA_CP;$APP_DIR_WIN\config" ; fi
-		if [ -d "$APP_DIR_WIN\target\test-classes" ]; then RUN_JAVA_CP="$RUN_JAVA_CP;$APP_DIR_WIN\target\test-classes" ; fi
-		if [ -d "$APP_DIR_WIN\target\classes" ]; then RUN_JAVA_CP="$RUN_JAVA_CP;$APP_DIR_WIN\target\classes" ; fi
-		if [ -d "$APP_DIR_WIN\target\dependency" ]; then RUN_JAVA_CP="$RUN_JAVA_CP;$APP_DIR_WIN\target\dependency\*" ; fi
-		if [ -d "$APP_DIR_WIN\target" ]; then RUN_JAVA_CP="$RUN_JAVA_CP;$APP_DIR_WIN\target\*" ; fi
-		if [ -d "$APP_DIR_WIN\lib" ]; then RUN_JAVA_CP="$RUN_JAVA_CP;$APP_DIR_WIN\lib\*" ; fi
-	else
-		if [ -d "$APP_DIR/config" ]; then RUN_JAVA_CP="$RUN_JAVA_CP:$APP_DIR/config" ; fi
-		if [ -d "$APP_DIR/target/test-classes" ]; then RUN_JAVA_CP="$RUN_JAVA_CP:$APP_DIR/target/test-classes" ; fi
-		if [ -d "$APP_DIR/target/classes" ]; then RUN_JAVA_CP="$RUN_JAVA_CP:$APP_DIR/target/classes" ; fi
-		if [ -d "$APP_DIR/target/dependency" ]; then RUN_JAVA_CP="$RUN_JAVA_CP:$APP_DIR/target/dependency/*" ; fi
-		if [ -d "$APP_DIR/target" ]; then RUN_JAVA_CP="$RUN_JAVA_CP:$APP_DIR/target/*" ; fi
-		if [ -d "$APP_DIR/lib" ]; then RUN_JAVA_CP="$RUN_JAVA_CP:$APP_DIR/lib/*" ; fi
-	fi
+	if [ -d "$APP_DIR/config" ]; then RUN_JAVA_CP="$RUN_JAVA_CP:$APP_DIR/config" ; fi
+	if [ -d "$APP_DIR/target/test-classes" ]; then RUN_JAVA_CP="$RUN_JAVA_CP:$APP_DIR/target/test-classes" ; fi
+	if [ -d "$APP_DIR/target/classes" ]; then RUN_JAVA_CP="$RUN_JAVA_CP:$APP_DIR/target/classes" ; fi
+	if [ -d "$APP_DIR/target/dependency" ]; then RUN_JAVA_CP="$RUN_JAVA_CP:$APP_DIR/target/dependency/*" ; fi
+	if [ -d "$APP_DIR/lib" ]; then RUN_JAVA_CP="$RUN_JAVA_CP:$APP_DIR/lib/*" ; fi
 fi
 
+ARGS="$@"
 # Parse addition "-cp" and "-D" after the Java main class from script arguments
 #   This is done for convenient sake so users do not have to export RUN_JAVA_CP and RUN_JAVA_OPTS
 #   saparately, but now they can pass into end of this run-java script instead.
 #   This can be disable by setting RUN_JAVA_NO_PARSE=1.
-if [ -z "$RUN_JAVA_NO_PARSE" ]; then	
+if [ -z "$RUN_JAVA_NO_PARSE" ]; then
 	# Prepare variables for parsing
 	FOUND_CP=
-	declare -a NEW_ARGS
+	NEW_ARGS[0]=''
 	IDX=0
-	
+
 	# Parse all arguments and look for "-cp" and "-D"
 	for ARG in "$@"; do
-		if [[ -n $FOUND_CP ]]; then	
-			if [ "$OS" = "Windows_NT" ]; then
-				# Can't use cygpath here, because cygpath will auto expand "*", which we do not
-				# want. User will just have to use OS path when specifying "-cp" option.	
-				#ARG=$(cygpath -w -a $ARG)
-				RUN_JAVA_CP="$RUN_JAVA_CP;$ARG"
-			else
-				RUN_JAVA_CP="$RUN_JAVA_CP:$ARG"
-			fi
+		if [[ -n $FOUND_CP ]]; then
+			RUN_JAVA_CP="$RUN_JAVA_CP:$ARG"
 			FOUND_CP=
 		else
 			case $ARG in
 			esac
 		fi
 	done
-		
-	# Display full Java command.
-	if [ -n "$RUN_JAVA_DEBUG" ] || [ -n "$RUN_JAVA_DRY" ]; then
-		echo "$JAVA_CMD" $RUN_JAVA_OPTS -cp "$RUN_JAVA_CP" "${NEW_ARGS[@]}"
-	fi
-	
-	# Run Java Main class using parsed variables
-	if [ -z "$RUN_JAVA_DRY" ]; then
-		"$JAVA_CMD" $RUN_JAVA_OPTS -cp "$RUN_JAVA_CP" "${NEW_ARGS[@]}"
-	fi
-else
-	# Display full Java command.
-	if [ -n "$RUN_JAVA_DEBUG" ] || [ -n "$RUN_JAVA_DRY" ]; then
-		echo "$JAVA_CMD" $RUN_JAVA_OPTS -cp "$RUN_JAVA_CP" "$@"
-	fi
-	
-	# Run Java Main class
-	if [ -z "$RUN_JAVA_DRY" ]; then
-		"$JAVA_CMD" $RUN_JAVA_OPTS -cp "$RUN_JAVA_CP" "$@"
-	fi
+	ARGS="${NEW_ARGS[@]}"
 fi
+
+# Convert Windows Java Classpath
+if $CYGWIN; then
+	RUN_JAVA_CP=$(cygpath -mp $RUN_JAVA_CP)
+fi
+
+# Display full Java command.
+if [ -n "$RUN_JAVA_DEBUG" ] || [ -n "$RUN_JAVA_DRY" ]; then
+	echo "$JAVA_CMD" $RUN_JAVA_OPTS -cp "$RUN_JAVA_CP" $ARGS
+fi
+
+# Run Java Main class
+if [ -z "$RUN_JAVA_DRY" ]; then
+	"$JAVA_CMD" $RUN_JAVA_OPTS -cp "$RUN_JAVA_CP" $ARGS
+fi