1. k_ui

    Posted

    k_ui
Changes in title
+実行可能 jar をコマンドっぽく実行するために(java -jar 使いたくない)
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,59 @@
+実行可能 jar を `java -jar foo.jar` 叩かないで実行する方法の紹介です。
+
+ダルイ点
+------------
+
+実行可能 jar を実行する場合こんな感じで実行することが多いと思います:
+
+```bash:sbt_の実行例.sh
+$ java -jar sbt-launch.jar
+```
+
+* [sbt](http://www.scala-sbt.org/)
+
+これはダルイので、こういうキッカースクリプトを書く:
+
+```bash
+$ 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](http://www.scala-sbt.org/release/docs/Getting-Started/Setup.html#unix)
+
+でもこれだと:
+
+```bash
+$ ls
+sbt sbt-launch.jar
+```
+
+強く依存してる2つの別ファイルができて、どっちか移動したら動かなくなるし、心が不安定になる。
+
+解決方法
+-----------
+
+基本は、[シェルスクリプトにファイルを添付する](http://qiita.com/k_ui/items/7ac8f6377740ef3a1ee1) と同じ発想。ただし、`java -jar` が少し賢いので、かなりシンプルにできる。
+
+```bash
+$ cat bootstrap
+#!/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](http://www.eclipse.org/jgit/ "JGit") もやっている方法だったりする。