Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

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

k_ui
ねこほしい
http://k-ui.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした