1. Qiita
  2. 投稿
  3. Java

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

  • 55
    いいね
  • 4
    コメント
この記事は最終更新日から1年以上が経過しています。

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

Comments Loading...