実行可能 jar を java -jar foo.jar
叩かないで実行する方法の紹介です。
ダルイ点
実行可能 jar を実行する場合こんな感じで実行することが多いと思います:
sbt_の実行例.sh
$ java -jar sbt-launch.jar
これはダルイので、こういうキッカースクリプトを書く:
$ cat sbt
#!/bin/sh
SBT_OPTS='-Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M'
java $SBT_OPTS -jar `dirname $0`/sbt-launch.jar "$@"
$ chmod +x sbt
$ ./sbt
- これが sbt 公式が紹介してる方法だったりする: Setup — sbt Documentation
でもこれだと:
$ ls
sbt sbt-launch.jar
強く依存してる2つの別ファイルができて、どっちか移動したら動かなくなるし、心が不安定になる。
解決方法
基本は、シェルスクリプトにファイルを添付する と同じ発想。ただし、java -jar
が少し賢いので、かなりシンプルにできる。
$ cat bootstrap.sh
#!/bin/sh
SBT_OPTS='-Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M'
java $SBT_OPTS -jar "$0" "$@"
exit $?
$ cat bootstrap.sh sbt-launch.jar > sbt
$ chmod +x sbt
$ ./sbt
$ ./sbt help
jar もキッカースクリプトも 1 ファイルに梱包してる sbt
というファイルができる。bootstrap.sh
の 4 行目の exit
もファイル末尾の空行も大切です。
ちなみにコレは、jgit もやっている方法だったりする。
まとめ
個人的に使うなら、ここまでせずとも、別ファイルのキッカースクリプトがあれば十分。
ただ、実行可能 jar を配布する機会がある場合は、こういう形式のファイルも配布すると使い手も快適に使えそう。