Javaで開発されたアプリケーションを使う際に避けて通れないのが、jarファイルの実行です。
「どうやって実行すればいいの?」「コマンドラインで起動する方法がわからない」という方も多いのではないでしょうか。
この記事では、jarファイルの実行方法について、基本的なjava -jarコマンドの使い方から、メインクラスの指定方法、バッチファイルを使った起動方法まで詳しく解説しています。
Javaアプリケーションをスムーズに起動できるようになるために、ぜひ最後までご確認ください。
jarファイルの基本的な実行方法とjava -jarコマンドの仕組み
それではまず、jarファイルの基本的な実行方法とjava -jarコマンドの仕組みについて解説していきます。
jarファイルを実行する最も基本的な方法は、コマンドラインで「java -jar ファイル名.jar」と入力することです。
このコマンドを実行すると、JVM(Java仮想マシン)が起動し、jarファイル内のMANIFEST.MFで指定されたメインクラスが自動的に読み込まれてアプリケーションが起動します。
基本的な実行コマンド:
java -jar アプリ名.jar
引数を渡す場合:
java -jar アプリ名.jar 引数1 引数2
java -jarオプションの意味と役割
「java」はJVMを起動するコマンドであり、「-jar」オプションはその後に続くファイルをjarファイルとして実行することをJVMに伝えるオプションです。
-jarオプションを使う場合、クラスパスの設定は通常のクラスパスオプション(-cpや-classpath)ではなくMANIFEST.MFのClass-Path属性で制御されます。
そのため、-jarオプションと-cpオプションを同時に使っても、-cpの指定は無視される点に注意が必要です。
メインクラスの指定と実行の仕組み
java -jarコマンドが実行されると、JVMはまずjarファイル内のMANIFEST.MFを参照し、「Main-Class」属性に記述されたクラスを特定します。
このメインクラスにはpublic static void main(String[] args)メソッドが定義されている必要があり、これがアプリケーションのエントリーポイントとなります。
MANIFEST.MFにMain-Classが定義されていない実行不可能なjarファイルを「java -jar」で実行しようとすると「no main manifest attribute」エラーが発生します。
クラスパスを指定して実行する方法
Main-Classが定義されていないjarファイルや、特定のクラスを直接実行したい場合は、-cpオプションを使います。
クラスパスを指定して実行する例:
java -cp myapp.jar com.example.MainApp
複数のjarをクラスパスに追加する場合(Windows):
java -cp myapp.jar;lib\dependency.jar com.example.MainApp
(Linuxの場合はセミコロンをコロンに変更)
jarファイル実行時のJVMオプションの活用方法
続いては、jarファイル実行時のJVMオプションの活用方法を確認していきます。
JVMにはさまざまな起動オプションが用意されており、アプリケーションのパフォーマンスや動作をカスタマイズできます。
| JVMオプション | 説明 |
|---|---|
| -Xmx | 最大ヒープサイズの設定(例:-Xmx512m で512MB) |
| -Xms | 初期ヒープサイズの設定(例:-Xms256m で256MB) |
| -D | システムプロパティの設定(例:-Dfile.encoding=UTF-8) |
| -verbose:gc | ガベージコレクションのログを出力 |
| -server / -client | サーバーモード・クライアントモードのJIT最適化切り替え |
ヒープサイズの設定方法
大量のデータを処理するJavaアプリケーションでは、デフォルトのヒープサイズでは不足してOutOfMemoryErrorが発生することがあります。
ヒープサイズを指定して実行する例:
java -Xms256m -Xmx1024m -jar myapp.jar
(初期ヒープ256MB、最大ヒープ1GBで起動)
アプリケーションの性質に合わせてヒープサイズを適切に設定することで、パフォーマンスの向上やエラーの防止につながるでしょう。
システムプロパティの設定方法
-Dオプションを使うと、アプリケーション内でSystem.getProperty()で参照できるシステムプロパティを起動時に設定できます。
システムプロパティを指定した実行例:
java -Dfile.encoding=UTF-8 -Denv=production -jar myapp.jar
文字コードの設定や環境フラグの切り替えなど、アプリケーションの動作を柔軟に制御できる便利な仕組みです。
ログ設定とデバッグオプション
開発中やトラブル対応時には、デバッグ用のオプションを活用することで詳細な情報を得られます。
リモートデバッグを有効にした実行例:
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar myapp.jar
このオプションを設定することで、IntelliJ IDEAやEclipseなどのIDEからリモートデバッグが可能になります。
バッチファイルを使ったjarファイルの起動方法
続いては、バッチファイルを使ったjarファイルの起動方法を確認していきます。
毎回コマンドを手打ちするのは手間がかかります。
バッチファイル(.bat)を作成しておくことで、ダブルクリック一発でjarファイルを起動できるようになります。
バッチファイルの作成手順
メモ帳などのテキストエディタを開き、以下のような内容でバッチファイルを作成します。
バッチファイルの例(start.bat):
@echo off
java -Xmx512m -jar myapp.jar
pause
「@echo off」でコマンドの表示を抑制し、「pause」でウィンドウが閉じないようにしています。
このファイルを「start.bat」などの名前で保存し、jarファイルと同じディレクトリに置くことで、ダブルクリックで起動できるようになるでしょう。
バッチファイルでのパス指定のコツ
バッチファイルでは、実行時のカレントディレクトリがバッチファイルの場所と異なる場合があります。
確実に同じディレクトリのjarファイルを参照させるには、バッチファイルの先頭に「cd /d %~dp0」を追加します。
カレントディレクトリを確実に設定したバッチファイルの例:
@echo off
cd /d %~dp0
java -jar myapp.jar
pause
「%~dp0」はバッチファイル自身があるディレクトリのパスを表す特殊変数です。
Windowsのタスクスケジューラと組み合わせた定期実行
バッチファイルをWindowsのタスクスケジューラに登録することで、jarファイルを定期的に自動実行させることも可能です。
タスクスケジューラで「タスクの作成」から、バッチファイルを指定したタスクを登録し、実行スケジュールを設定します。
定期的なデータ処理や自動化ツールとしてJavaアプリケーションを活用したい場合に大変便利な機能でしょう。
まとめ
この記事では、jarファイルの実行方法について、コマンドラインでの起動手順やJVMオプション、バッチファイルの活用まで詳しく解説しました。
「java -jar」コマンドが基本の実行方法であり、JVMオプションを追加することでメモリ設定や文字コード指定など細かな制御ができます。
バッチファイルを活用すれば、複雑なオプションをまとめてダブルクリックひとつで起動できる環境を整えられるでしょう。
今回の内容を参考に、jarファイルの実行をより効率的に行ってみてください。