torutkのブログスマートフォン用の表示で見るtorutkのブログソフトウェア・エンジニアのブログ2015-11-27実行可能JARファイルをバッチファイルまたはシェルスクリプトに結合して実行するJavaJavaのプログラムを実行可能JAR形式で作成すると、プログラムを配布するのがJARファイル1つで済みます*1。Environment)がインストールされていれば、ファイルをエクスプローラー上でダブルクリックしても、コマンドプロンプトからJARファイル名だけを指定して実行してもプログラムが立ち上がります。JREをRPMパッケージでインストールしていると、コマンド環境ではJARファイル名だけを指定して実行するとプログラムが立ち上がります。GNOMEデスクトップ上のファイルフォルダ(ノーチラス?)は残念ながら書庫ツールが開いてしまいました(JARはZIP形式なので)。OpenJDKでは、コマンドラインでもファイル名だけ指定しただけでは実行されませんでした。このように便利な(Linux上でのOpenJDKを除く)実行可能JARですが、次のデメリットがあります。JavaVMオプションの指定が困難*2使用するJREのバージョンを指定することができないJavaVMオプションの指定ができないと、使用するメモリ(ヒープサイズ)の指定、ガベージコレクターの指定、ロケールやエンコーディング指定などが、デフォルト(お任せ)になってしまいます。デフォルトの値で困ることとして、複数のJavaVMを同時に実行すると、メモリの使用、CPUの使用が過剰となってマシン全体に影響を与えることがあります。OS上で64bit版のJavaVMを実行すると、ヒープサイズが初期値で128MB*3、パラレルガベージコレクタが選択されるのでGCの際に搭載CPU(コア)をフル使用します。このJavaVMを多数実行すると、相当のメモリ使用量、CPU使用量となります。そのため、小さなプログラムを多数動かす際には、ヒープサイズを小さめに、ガベージコレクタもシリアル型にしたいというニーズがあります。単一ファイルを配布して実行できる実行可能JAR形式ですが、JavaVMオプションなどを指定したいときは、別途バッチファイルやシェルスクリプトを用意して、そこからJavaVMオプションやJARファイルを指定して実行する形になってしまいます。そんなときに、先週土曜日に開催したJava読書会の2次会で、JARファイルをシェルスクリプトに結合するのもできるよ、ということを聞きました。-jarに続けて自分自身のパスを指定、JARファイルはZIP書庫形式で、これはファイル先頭にゴミがあっても無視するので実行可能ということだそうです。シェルスクリプトに結合する場合について分かりやすく解説しているブログがありました。Qiitaこれを参考に、シェルスクリプト(Linux)とバッチファイル(Windows)で試してみました。World的なJavaのコードを書いて実行可能JARファイルを作成します。実行可能JARファイルの生成は主要なIDEなら標準で対応しています。次に、このJARファイルを呼び出すシェルスクリプト、バッチファイルを記述します。ファイルを作成し、以下を記述します。ファイルを作成し、以下を記述します。月別アーカイブはてなブログをはじめよう!torutkさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。