search
LoginSignup
68

More than 5 years have passed since last update.

posted at

updated at

実行可能 jar をコマンドっぽく実行するために(java -jar 使いたくない)

実行可能 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

でもこれだと:

$ 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 を配布する機会がある場合は、こういう形式のファイルも配布すると使い手も快適に使えそう。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
68