diff --git a/sbt b/sbt index 5475171b..35b59f73 100755 --- a/sbt +++ b/sbt @@ -8,6 +8,7 @@ set -o pipefail declare -r sbt_release_version="1.2.8" declare -r sbt_unreleased_version="1.3.0-RC1" +declare -r coursier_launcher_version="1.2.15" declare -r latest_213="2.13.0" declare -r latest_212="2.12.8" @@ -26,6 +27,8 @@ declare -r sbt_launch_mvn_snapshot_repo="http://repo.scala-sbt.org/scalasbt/mave declare -r default_jvm_opts_common="-Xms512m -Xss2m" declare -r noshare_opts="-Dsbt.global.base=project/.sbtboot -Dsbt.boot.directory=project/.boot -Dsbt.ivy.home=project/.ivy" +declare use_coursier_launcher="false" + declare sbt_jar sbt_dir sbt_create sbt_version sbt_script sbt_new declare sbt_explicit_version declare verbose noshare batch trace_level @@ -41,6 +44,10 @@ declare -a java_args scalac_args sbt_commands residual_args # args to jvm/sbt via files or environment variables declare -a extra_jvm_opts extra_sbt_opts +if [[ "$SBTX_COURSIER" == true ]]; then + use_coursier_launcher="true" +fi + echoerr () { echo >&2 "$@"; } vlog () { [[ -n "$verbose" ]] && echoerr "$@"; } die () { echo "Aborting: $*" ; exit 1; } @@ -137,6 +144,12 @@ make_url () { esac } +make_coursier_url () { + local version="$1" + + echo "https://github.com/coursier/sbt-launcher/releases/download/v$version/csbt" +} + addJava () { vlog "[addJava] arg = '$1'" ; java_args+=("$1"); } addSbt () { vlog "[addSbt] arg = '$1'" ; sbt_commands+=("$1"); } addScalac () { vlog "[addScalac] arg = '$1'" ; scalac_args+=("$1"); } @@ -254,8 +267,9 @@ jar_file () { download_url () { local url="$1" local jar="$2" + local message="$3" - echoerr "Downloading sbt launcher for $sbt_version:" + echoerr "$message" echoerr " From $url" echoerr " To $jar" @@ -269,15 +283,33 @@ download_url () { } acquire_sbt_jar () { + + # only enable coursier sbt launcher for the sbt versions it supports + if [[ "$use_coursier_launcher" == "true" && "$sbt_version" != 0.13.[89] && "$sbt_version" != 0.13.1[0-9] && "$sbt_version" != 1.* ]]; then + use_coursier_launcher="false" + fi + { - sbt_jar="$(jar_file "$sbt_version")" + if [[ "$use_coursier_launcher" == "true" ]]; then + sbt_jar="$(jar_file "coursier_$coursier_launcher_version")" + else + sbt_jar="$(jar_file "$sbt_version")" + fi + [[ -r "$sbt_jar" ]] } || { sbt_jar="$HOME/.ivy2/local/org.scala-sbt/sbt-launch/$sbt_version/jars/sbt-launch.jar" - [[ -r "$sbt_jar" ]] + [[ "$use_coursier_launcher" != "true" && -r "$sbt_jar" ]] } || { - sbt_jar="$(jar_file "$sbt_version")" - download_url "$(make_url "$sbt_version")" "$sbt_jar" + if [[ "$use_coursier_launcher" == true ]]; then + sbt_jar="$(jar_file "coursier_$coursier_launcher_version")" + download_url "$(make_coursier_url "$coursier_launcher_version")" "$sbt_jar" \ + "Downloading coursier sbt launcher $coursier_launcher_version:" + else + sbt_jar="$(jar_file "$sbt_version")" + download_url "$(make_url "$sbt_version")" "$sbt_jar" \ + "Downloading sbt launcher for $sbt_version:" + fi } } @@ -505,6 +537,9 @@ if [[ -n "$noshare" ]]; then for opt in ${noshare_opts}; do addJava "$opt" done + if [[ -z "$COURSIER_CACHE" ]]; then + export COURSIER_CACHE="project/.coursier-cache" + fi else case "$sbt_version" in "0.7."* | "0.10."* | "0.11."* | "0.12."* )