sbt/bin/sbt-runner

92 lines
2.7 KiB
Bash
Executable File

#!/usr/bin/env bash
#
declare -r script_name="$(basename $BASH_SOURCE)"
declare -r sbt_jar=/soft/inst/sbt/xsbt-launch.jar
declare -r default_java_opts="-Dfile.encoding=UTF8"
declare -r default_sbt_opts="-XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=512m -Xmx2g -Xss2m"
declare -r latest_28="2.8.1"
declare -r latest_29="2.9.0-1"
declare -r latest_210="2.10.0-SNAPSHOT"
# get completion if present
[[ -f .sbt_completion.sh ]] && source .sbt_completion.sh
usage () {
cat <<EOM
Usage: $script_name [options]
-help prints this message
-boot path to shared sbt boot directory (default: none)
-debug set sbt log level to debug
-global path to directory containing global settings and plugins (default: ~/.sbt)
-ivy path to local Ivy repository (default: ~/.ivy2)
-nocolor disable ANSI color codes
-28 set scala version to $latest_28
-29 set scala version to $latest_29
-210 set scala version to $latest_210
-Dkey=val pass -Dkey=val directly to the jvm
-J-X pass option -X directly to the jvm
The contents of the following environment variables, if any, will be
passed to the jvm. Later variables take priority over earlier ones, and
command line options (-D/-J) take priority over all of them.
JAVA_OPTS # defaults: $default_java_opts
SBT_OPTS # defaults: $default_sbt_opts
If an environment variable is set, its defaults are not given.
EOM
}
# no args - alert them there's stuff in here
[[ $# -gt 0 ]] || {
echo "Starting $script_name: invoke with -help for other options"
# so it still starts if we injected any sbt commands
set -- "shell"
}
# pull -J and -D options to give to java.
declare -a args
declare -a java_args
declare -a sbt_commands
addJava () {
java_args=("${java_args[@]}" "$1")
}
addSbt () {
sbt_commands=("${sbt_commands[@]}" "$1")
}
while [ $# -gt 0 ]; do
case "$1" in
-help) usage; exit 1 ;;
-global) addJava "-Dsbt.global.base=$2"; shift 2 ;;
-boot) addJava "-Dsbt.boot.directory=$2"; shift 2 ;;
-ivy) addJava "-Dsbt.ivy.home=$2"; shift 2 ;;
-nocolors) addJava "-Dsbt.log.noformat=true"; shift ;;
-28) addJava "-Dsbt.scala.version=$latest_28"; shift ;;
-29) addJava "-Dsbt.scala.version=$latest_29"; shift ;;
-210) addJava "-Dsbt.scala.version=$latest_210"; shift ;;
-D*) addJava "$1"; shift ;;
-J*) addJava "${1:2}"; shift ;;
-debug) addSbt "set logLevel := Level.Debug"; shift ;;
*) args=("${args[@]}" "$1") ; shift ;;
esac
done
# reset "$@" to the residual args
set -- "${args[@]}"
# run sbt
java \
$JAVA_OPTS \
${SBT_OPTS:-$default_sbt_opts} \
${java_args[@]} \
-jar "$sbt_jar" \
"${sbt_commands[@]}" \
"$@"