1
1
#! /usr/bin/env bash
2
2
#
3
3
# A more capable sbt runner, coincidentally also called sbt.
4
- # Author: Paul Phillips <paulp@typesafe.com >
4
+ # Author: Paul Phillips <paulp@improving.org >
5
5
6
6
# todo - make this dynamic
7
- declare -r sbt_release_version=" 0.13.6 "
8
- declare -r sbt_unreleased_version=" 0.13.6 "
7
+ declare -r sbt_release_version=" 0.13.8 "
8
+ declare -r sbt_unreleased_version=" 0.13.9-M1 "
9
9
declare -r buildProps=" project/build.properties"
10
10
11
11
declare sbt_jar sbt_dir sbt_create sbt_version
@@ -19,7 +19,7 @@ vlog () { [[ -n "$verbose" ]] && echoerr "$@"; }
19
19
# spaces are possible, e.g. sbt.version = 0.13.0
20
20
build_props_sbt () {
21
21
[[ -r " $buildProps " ]] && \
22
- grep ' ^sbt\.version' " $buildProps " | tr ' =' ' ' | awk ' { print $2; }'
22
+ grep ' ^sbt\.version' " $buildProps " | tr ' =\r ' ' ' | awk ' { print $2; }'
23
23
}
24
24
25
25
update_build_props_sbt () {
@@ -105,8 +105,8 @@ declare -r default_jvm_opts_common="-Xms512m -Xmx1536m -Xss2m $jit_opts $cms_opt
105
105
declare -r noshare_opts=" -Dsbt.global.base=project/.sbtboot -Dsbt.boot.directory=project/.boot -Dsbt.ivy.home=project/.ivy"
106
106
declare -r latest_28=" 2.8.2"
107
107
declare -r latest_29=" 2.9.3"
108
- declare -r latest_210=" 2.10.4 "
109
- declare -r latest_211=" 2.11.2 "
108
+ declare -r latest_210=" 2.10.5 "
109
+ declare -r latest_211=" 2.11.7 "
110
110
111
111
declare -r script_path=" $( get_script_path " $BASH_SOURCE " ) "
112
112
declare -r script_name=" ${script_path##*/ } "
@@ -115,7 +115,7 @@ declare -r script_name="${script_path##*/}"
115
115
declare java_cmd=" java"
116
116
declare sbt_opts_file=" $( init_default_option_file SBT_OPTS .sbtopts) "
117
117
declare jvm_opts_file=" $( init_default_option_file JVM_OPTS .jvmopts) "
118
- declare sbt_launch_repo=" http://typesafe.artifactoryonline .com/typesafe/ivy-releases"
118
+ declare sbt_launch_repo=" http://repo.typesafe .com/typesafe/ivy-releases"
119
119
120
120
# pull -J and -D options to give to java.
121
121
declare -a residual_args
@@ -126,16 +126,65 @@ declare -a sbt_commands
126
126
# args to jvm/sbt via files or environment variables
127
127
declare -a extra_jvm_opts extra_sbt_opts
128
128
129
- # if set, use JAVA_HOME over java found in path
130
- [[ -e " $JAVA_HOME /bin/java" ]] && java_cmd=" $JAVA_HOME /bin/java"
129
+ addJava () {
130
+ vlog " [addJava] arg = '$1 '"
131
+ java_args+=(" $1 " )
132
+ }
133
+ addSbt () {
134
+ vlog " [addSbt] arg = '$1 '"
135
+ sbt_commands+=(" $1 " )
136
+ }
137
+ setThisBuild () {
138
+ vlog " [addBuild] args = '$@ '"
139
+ local key=" $1 " && shift
140
+ addSbt " set $key in ThisBuild := $@ "
141
+ }
142
+ addScalac () {
143
+ vlog " [addScalac] arg = '$1 '"
144
+ scalac_args+=(" $1 " )
145
+ }
146
+ addResidual () {
147
+ vlog " [residual] arg = '$1 '"
148
+ residual_args+=(" $1 " )
149
+ }
150
+ addResolver () {
151
+ addSbt " set resolvers += $1 "
152
+ }
153
+ addDebugger () {
154
+ addJava " -Xdebug"
155
+ addJava " -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=$1 "
156
+ }
157
+ setScalaVersion () {
158
+ [[ " $1 " == * " -SNAPSHOT" ]] && addResolver ' Resolver.sonatypeRepo("snapshots")'
159
+ addSbt " ++ $1 "
160
+ }
161
+ setJavaHome () {
162
+ java_cmd=" $1 /bin/java"
163
+ setThisBuild javaHome " Some(file(\" $1 \" ))"
164
+ export JAVA_HOME=" $1 "
165
+ export JDK_HOME=" $1 "
166
+ export PATH=" $JAVA_HOME /bin:$PATH "
167
+ }
168
+ setJavaHomeQuietly () {
169
+ addSbt warn
170
+ setJavaHome " $1 "
171
+ addSbt info
172
+ }
173
+
174
+ # if set, use JDK_HOME/JAVA_HOME over java found in path
175
+ if [[ -e " $JDK_HOME /lib/tools.jar" ]]; then
176
+ setJavaHomeQuietly " $JDK_HOME "
177
+ elif [[ -e " $JAVA_HOME /bin/java" ]]; then
178
+ setJavaHomeQuietly " $JAVA_HOME "
179
+ fi
131
180
132
181
# directory to store sbt launchers
133
182
declare sbt_launch_dir=" $HOME /.sbt/launchers"
134
183
[[ -d " $sbt_launch_dir " ]] || mkdir -p " $sbt_launch_dir "
135
184
[[ -w " $sbt_launch_dir " ]] || sbt_launch_dir=" $( mktemp -d -t sbt_extras_launchers.XXXXXX) "
136
185
137
186
java_version () {
138
- local version=$( " $java_cmd " -version 2>&1 | grep -e ' java version' | awk ' { print $3 }' | tr -d \" )
187
+ local version=$( " $java_cmd " -version 2>&1 | grep -E - e ' ( java|openjdk) version' | awk ' { print $3 }' | tr -d \" )
139
188
vlog " Detected Java version: $version "
140
189
echo " ${version: 2: 1} "
141
190
}
@@ -195,7 +244,7 @@ download_url () {
195
244
196
245
mkdir -p " ${jar%/* } " && {
197
246
if which curl > /dev/null; then
198
- curl --fail --silent " $url " --output " $jar "
247
+ curl --fail --silent --location " $url " --output " $jar "
199
248
elif which wget > /dev/null; then
200
249
wget --quiet -O " $jar " " $url "
201
250
fi
@@ -280,40 +329,6 @@ runner with the -x option.
280
329
EOM
281
330
}
282
331
283
- addJava () {
284
- vlog " [addJava] arg = '$1 '"
285
- java_args=( " ${java_args[@]} " " $1 " )
286
- }
287
- addSbt () {
288
- vlog " [addSbt] arg = '$1 '"
289
- sbt_commands=( " ${sbt_commands[@]} " " $1 " )
290
- }
291
- setThisBuild () {
292
- vlog " [addBuild] args = '$@ '"
293
- local key=" $1 " && shift
294
- addSbt " set $key in ThisBuild := $@ "
295
- }
296
-
297
- addScalac () {
298
- vlog " [addScalac] arg = '$1 '"
299
- scalac_args=( " ${scalac_args[@]} " " $1 " )
300
- }
301
- addResidual () {
302
- vlog " [residual] arg = '$1 '"
303
- residual_args=( " ${residual_args[@]} " " $1 " )
304
- }
305
- addResolver () {
306
- addSbt " set resolvers += $1 "
307
- }
308
- addDebugger () {
309
- addJava " -Xdebug"
310
- addJava " -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=$1 "
311
- }
312
- setScalaVersion () {
313
- [[ " $1 " == * " -SNAPSHOT" ]] && addResolver ' Resolver.sonatypeRepo("snapshots")'
314
- addSbt " ++ $1 "
315
- }
316
-
317
332
process_args ()
318
333
{
319
334
require_arg () {
@@ -329,9 +344,9 @@ process_args ()
329
344
case " $1 " in
330
345
-h|-help) usage; exit 1 ;;
331
346
-v) verbose=true && shift ;;
332
- -d) addSbt " --debug" && shift ;;
333
- -w) addSbt " --warn" && shift ;;
334
- -q) addSbt " --error" && shift ;;
347
+ -d) addSbt " --debug" && addSbt debug && shift ;;
348
+ -w) addSbt " --warn" && addSbt warn && shift ;;
349
+ -q) addSbt " --error" && addSbt error && shift ;;
335
350
-x) debugUs=true && shift ;;
336
351
-trace) require_arg integer " $1 " " $2 " && trace_level=" $2 " && shift 2 ;;
337
352
-ivy) require_arg path " $1 " " $2 " && addJava " -Dsbt.ivy.home=$2 " && shift 2 ;;
@@ -355,7 +370,7 @@ process_args ()
355
370
-scala-version) require_arg version " $1 " " $2 " && setScalaVersion " $2 " && shift 2 ;;
356
371
-binary-version) require_arg version " $1 " " $2 " && setThisBuild scalaBinaryVersion " \" $2 \" " && shift 2 ;;
357
372
-scala-home) require_arg path " $1 " " $2 " && setThisBuild scalaHome " Some(file(\" $2 \" ))" && shift 2 ;;
358
- -java-home) require_arg path " $1 " " $2 " && java_cmd= " $2 /bin/java " && shift 2 ;;
373
+ -java-home) require_arg path " $1 " " $2 " && setJavaHome " $2 " && shift 2 ;;
359
374
-sbt-opts) require_arg path " $1 " " $2 " && sbt_opts_file=" $2 " && shift 2 ;;
360
375
-jvm-opts) require_arg path " $1 " " $2 " && jvm_opts_file=" $2 " && shift 2 ;;
361
376
@@ -367,6 +382,9 @@ process_args ()
367
382
-210) setScalaVersion " $latest_210 " && shift ;;
368
383
-211) setScalaVersion " $latest_211 " && shift ;;
369
384
385
+ --debug) addSbt debug && addResidual " $1 " && shift ;;
386
+ --warn) addSbt warn && addResidual " $1 " && shift ;;
387
+ --error) addSbt error && addResidual " $1 " && shift ;;
370
388
* ) addResidual " $1 " && shift ;;
371
389
esac
372
390
done
@@ -522,4 +540,4 @@ mainFiltered () {
522
540
shouldFilter () { [[ -f ~ /.sbtignore ]] && ! egrep -q ' \b(shell|console|consoleProject)\b' <<< " ${residual_args[@]}" ; }
523
541
524
542
# run sbt
525
- if shouldFilter; then mainFiltered; else main; fi
543
+ if shouldFilter; then mainFiltered; else main; fi
0 commit comments