Description
The jruby.bash
script in jruby-1.7 and jruby-9.0.0.0 sticks the $CLASSPATH
environment variable onto the end of the calculated -classpath
argument $CP
. The concatentation process happens whether or not $CLASSPATH
exists:
-classpath "$CP$CP_DELIMITER$CLASSPATH"
This means if you don't specify a $CLASSPATH
, -classpath
ends up with a trailing colon:
lib/foo.jar:lib/bar.jar:
That trailing colon puts the process root directory into -classpath
, whether or not you wanted it there. It's possible to work around this by setting $CLASSPATH
to a non-existent file/directory:
env CLASSPATH=/dev/null/does/not/exist jruby.bash
but it seems more appropriate to not put the current directory into -classpath
unless you explicitly request it:
env CLASSPATH=. jruby.bash
env CLASSPATH=$(pwd) jruby.bash
I have included a sample patch against jruby-1.7.11 which fixes the problem. It may also apply cleanly to the latest jruby-9.0.0.0 code.
diff --git a/jruby-1.7.11/bin/jruby.bash b/jruby-1.7.11/bin/jruby.bash
index 438d250..5cbecb0 100755
--- jruby-1.7.11/bin/jruby.bash
+++ jruby-1.7.11/bin/jruby.bash
@@ -309,6 +309,10 @@ JAVA_OPTS="$JAVA_OPTS $JAVA_MEM $JAVA_MEM_MIN $JAVA_STACK"
JFFI_OPTS="-Djffi.boot.library.path=$JRUBY_HOME/lib/jni"
+if test -n "$CLASSPATH"; then
+ CP="$CP$CP_DELIMITER$CLASSPATH"
+fi
+
if $cygwin; then
JRUBY_HOME=`cygpath --mixed "$JRUBY_HOME"`
JRUBY_SHELL=`cygpath --mixed "$JRUBY_SHELL"`
@@ -346,7 +350,7 @@ if [ "$VERIFY_JRUBY" != "" ]; then
JRUBY_OPTS=''
fi
- "$JAVACMD" $PROFILE_ARGS $JAVA_OPTS "$JFFI_OPTS" "${java_args[@]}" -classpath "$JRUBY_CP$CP_DELIMITER$CP$CP_DELIMITER$CLASSPATH" \
+ "$JAVACMD" $PROFILE_ARGS $JAVA_OPTS "$JFFI_OPTS" "${java_args[@]}" -classpath "$JRUBY_CP$CP_DELIMITER$CP" \
"-Djruby.home=$JRUBY_HOME" \
"-Djruby.lib=$JRUBY_HOME/lib" -Djruby.script=jruby \
"-Djruby.shell=$JRUBY_SHELL" \
@@ -369,7 +373,7 @@ if [ "$VERIFY_JRUBY" != "" ]; then
else
if $cygwin; then
# exec doed not work correctly with cygwin bash
- "$JAVACMD" $JAVA_OPTS "$JFFI_OPTS" "${java_args[@]}" -Xbootclasspath/a:"$JRUBY_CP" -classpath "$CP$CP_DELIMITER$CLASSPATH" \
+ "$JAVACMD" $JAVA_OPTS "$JFFI_OPTS" "${java_args[@]}" -Xbootclasspath/a:"$JRUBY_CP" -classpath "$CP" \
"-Djruby.home=$JRUBY_HOME" \
"-Djruby.lib=$JRUBY_HOME/lib" -Djruby.script=jruby \
"-Djruby.shell=$JRUBY_SHELL" \
@@ -382,7 +386,7 @@ else
exit $JRUBY_STATUS
else
- exec "$JAVACMD" $JAVA_OPTS "$JFFI_OPTS" "${java_args[@]}" -Xbootclasspath/a:"$JRUBY_CP" -classpath "$CP$CP_DELIMITER$CLASSPATH" \
+ exec "$JAVACMD" $JAVA_OPTS "$JFFI_OPTS" "${java_args[@]}" -Xbootclasspath/a:"$JRUBY_CP" -classpath "$CP" \
"-Djruby.home=$JRUBY_HOME" \
"-Djruby.lib=$JRUBY_HOME/lib" -Djruby.script=jruby \
"-Djruby.shell=$JRUBY_SHELL" \