Executable JAR を作る

Treasure Data の Embulk(http://www.embulk.org/docs/) をインストールして気になったので、メモ。

Embulkがなんなのかはドキュメントを読むとして、インストールするには以下のコマンドを叩くだけではいった。

curl --create-dirs -o ~/.embulk/bin/embulk -L "https://dl.embulk.org/embulk-latest.jar"
chmod +x ~/.embulk/bin/embulk
echo 'export PATH="$HOME/.embulk/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

これはjarをローカルに保存してそこにパスを通してるだけなんだけど、jarを直接指定して実行できるというのが妙にかっこいい。

普通jarファイルを実行するときは、 java -jar hoge.jar みたいな感じですると思う。

でも、以下の方法でexecutableな jarを作成することができる。

coderwall.com

手順としては、

#!/bin/sh
MYSELF=`which "$0" 2>/dev/null`
[ $? -gt 0 -a -f "$0" ] && MYSELF="./$0"
java=java
if test -n "$JAVA_HOME"; then
    java="$JAVA_HOME/bin/java"
fi
exec "$java" $java_args -jar $MYSELF "$@"
exit 1

を、executableにしたいjarの先頭に追加するだけ。

上記をstub.shなどとして保存して、 cat stub.sh hoge.jar > hoge.run とすると良い。

ちなみに、embulkのjarは、その先頭の END_OF_EMBULK_SELFRUN_BATCH_PART というセクションにMS-DOSのコマンドも書いてあり、 さすがですねと思った。