java - Java アプリケーション起動ツール

形式

    java [ options ] class [ argument ... ]
    java [ options ] -jar file.jar [ argument ... ]
    javaw [ options ] class [ argument ... ]
    javaw [ options ] -jar file.jar [ argument ... ]
options
コマンド行オプション
class
呼び出されるクラスの名前
file.jar
呼び出される JAR ファイルの名前。必ず -jar とともに使用する
argument
main 関数に渡される引数

説明

java ツールは、Java アプリケーションを起動します。java ツールは、Java Runtime Environment を起動したあと、指定されたクラスをロードし、そのクラスの main メソッドを呼び出すことにより、Java アプリケーションを起動します。

このメソッドは、public および static として宣言する必要があります。 また、値を返してはいけません。 さらに、String 配列をパラメータとして指定できなければなりません。メソッドの宣言は、次のようになっていなければなりません。

    public static void main(String args[])
デフォルトでは、コマンド行オプション以外の最初の引数が、呼び出されるクラスの名前になります。この名前には、完全指定のクラス名を使用する必要があります。-jar オプションを指定した場合、コマンド行オプション以外の最初の引数が、アプリケーションのクラスファイルとリソースファイルを含む JAR アーカイブの名前になります。 この場合、マニフェストの Main-Class ヘッダーで指定されたクラスが起動クラスになります。

Java Runtime は、ブートストラップクラスパス、インストール型拡張機能、およびユーザークラスパスの 3 箇所から起動クラスと他の使用されているクラスを検索します。

クラス名または JAR ファイル名のあとにある、コマンド行オプション以外の引数は、main 関数に渡されます。

javaw コマンドは、コンソールウィンドウがない以外は、java コマンドと同じです。javaw は、コマンドプロンプトウィンドウを表示する必要がないときに使用します。ただし、javaw 起動ツールでは、なんらかの理由で起動に失敗すると、エラー情報を示すダイアログボックスが表示されます。

オプション

起動ツールには、現在の実行環境および将来のリリースでサポートされる標準オプションがあります。また、デフォルトの Java HotSpot VM では、非標準オプションのセットも提供されます。これは、将来のリリースで変更される可能性があります。

標準オプション

-client

Java HotSpot Client VM を選択します。64 ビット対応 JDK は現時点では、このオプションを無視し、代わりに Java HotSpot Server VM を使用します。

デフォルトの VM の選択については、「サーバー - クラスマシンの検出」を参照してください。

-server

Java HotSpot Server VM を選択します。64 ビット対応 JDK 上では、サポートされるのは Java HotSpot Server VM だけであるため、-server オプションが暗黙的に選択されます。この仕様は、将来のリリースでは変更になる可能性があります。

デフォルトの VM の選択については、「サーバー - クラスマシンの検出」を参照してください。

-agentlib:libname[=options]
ネイティブエージェントライブラリ libname をロードします。たとえば次のように指定します。

-agentlib:hprof

-agentlib:jdwp=help

-agentlib:hprof=help

詳細については、「JVMTI エージェントのコマンド行オプション」を参照してください。

-agentpath:pathname[=options]
フルパス名を使用して、ネーティブエージェントライブラリをロードします。詳細については、「JVMTI エージェントのコマンド行オプション」を参照してください。
-classpath classpath
-cp classpath
クラスファイルを検索するディレクトリ、JAR アーカイブ、および ZIP アーカイブのリストを指定します。クラスパスの各エントリは、セミコロン (;) で区切ります。-classpath または -cp を指定すると、このオプションの値によって CLASSPATH 環境変数の設定がオーバーライドされます。

-classpath-cp も使用されず、CLASSPATH も設定されていない場合、ユーザークラスパスは現在のディレクトリ (.) になります。

便宜上、* のベース名を含むクラスパス要素は、ディレクトリ内の拡張子 .jar または .JAR を持つすべてのファイルのリストを指定するのと同じとみなされます (Java プログラムはこの 2 つの呼び出しを区別できない)。

たとえば、ディレクトリ fooa.jarb.JAR が含まれている場合、クラスパス要素 foo/*A.jar:b.JAR に展開されます。ただし、JAR ファイルの順番は指定されません。このリストには、隠しファイルも含め、指定されたディレクトリ内のすべての JAR ファイルが含まれます。* だけから成るクラスパスエントリは、カレントディレクトリ内のすべての JAR ファイルのリストに展開されます。CLASSPATH 環境変数も、定義時には同様に展開されます。クラスパスのワイルドカード展開は必ず、Java 仮想マシンの起動前に実行されます。したがって、System.getenv("CLASSPATH") 呼び出しのように環境に問い合わせを行わない限り、Java プログラムが展開されていないワイルドカードを認識することはありません。

クラスパスの詳細は、「クラスパスの設定」を参照してください。

-Dproperty=value
システムプロパティーの値を設定します。value が、スペースを含む文字列である場合は、文字列を次のように二重引用符で囲む必要があります。
        java -Dfoo="some string" SomeClass
        
-enableassertions[:<package name>"..."| :<class name> ]
-ea[:<package name>"..."| :<class name> ]
アサーションを有効にします。アサーションは、デフォルトでは無効になっています。

引数なしの enableassertions または -ea を指定すると、アサーションが有効になります。「...」で終わる引数を 1 つ指定すると、指定したパッケージとそのサブパッケージ内でアサーションが有効になります。引数として「...」だけを指定すると、現在の作業ディレクトリにある名前のないパッケージ内でアサーションが有効になります。「...」で終わらない引数を 1 つ指定すると、指定したクラス内でアサーションが有効になります。

単一コマンド行にこれらのスイッチのインスタンスを複数指定した場合は、指定したスイッチが順番に処理されてからクラスがロードされます。したがって、たとえば、パッケージ com.wombat.fruitbat (サブパッケージを含む) 内でのみアサーションを有効にしてプログラムを実行するには、次のようなコマンドを使用します。

java -ea:com.wombat.fruitbat... <Main Class>

-enableassertions および -ea スイッチは、すべてのクラスローダおよびシステムクラスに適用されます。システムクラスにはクラスローダはありません。ただし、この規則には例外が 1 つあります。それは、引数なしでこのスイッチを指定すると、その指定はシステムクラスには適用されない、ということです。この例外を利用すれば、システムクラスを除くすべてのクラスでアサーションを簡単に有効にすることができます。すべてのシステムクラスでアサーションを有効にするために、別のスイッチが用意されています。このあとの -enablesystemassertions を参照してください。

-disableassertions[:<package name>"..."| :<class ; ]
-da[:<package name>"..."| :<class name> ]
アサーションを無効にします。これはデフォルトの設定です。

引数なしの disableassertions または -da を指定すると、アサーションが無効になります。「...」で終わる引数を 1 つ指定すると、指定したパッケージとそのサブパッケージ内でアサーションが無効になります。引数として「...」だけを指定すると、現在の作業ディレクトリにある名前のないパッケージ内でアサーションが無効になります。「...」で終わらない引数を 1 つ指定すると、指定したクラス内でアサーションが無効になります。

パッケージ com.wombat.fruitbat 内ではアサーションを有効にし、クラス com.wombat.fruitbat.Brickbat 内ではアサーションを無効にしたうえで、プログラムを実行するには、次のようなコマンドを使用します。

java -ea:com.wombat.fruitbat... -da:com.wombat.fruitbat.Brickbat lt;メインクラス>

-disableassertions および -da スイッチは、すべてのクラスローダおよびシステムクラスに適用されます。システムクラスにはクラスローダはありません。ただし、この規則には例外が 1 つあります。それは、引数なしでこのスイッチを指定すると、その指定はシステムクラスには適用されない、ということです。この例外を利用すれば、システムクラスを除くすべてのクラスでアサーションを簡単に有効にすることができます。すべてのシステムクラスでアサーションを無効にするために、別のスイッチが用意されています。このあとの -disablesystemassertions を参照してください。

-enablesystemassertions
-esa
すべてのシステムクラス内でアサーションを有効にします。つまり、システムクラスについてアサーションのデフォルトステータスを true に設定します。
-disablesystemassertions
-dsa
すべてのシステムクラス内でアサーションを無効にします。

-jar
JAR ファイルにカプセル化されたプログラムを実行します。最初の引数は、起動クラスの名前ではなく、JAR ファイルの名前にします。このオプションが機能するには、JAR ファイルのマニフェストに「Main-Class:classnameという形式の行を指定する必要があります。classname には、アプリケーションの開始位置として機能する public static void main(String[] args) メソッドを含むクラスを指定します。JAR ファイルとそのマニフェストについては、jar ツールのリファレンスページと、Java チュートリアルの「Trail: Jar Files」を参照してください。

このオプションを使用すると、指定した JAR ファイルがすべてのユーザークラスのソースになり、ユーザークラスパスのほかの設定は無視されます。

-javaagent:jarpath[=options]
Java プログラミング言語エージェントをロードします。 java.lang.instrument を参照してください。
-verbose
-verbose:class
クラスがロードされるたびにクラスに関する情報を表示します。
-verbose:gc
ガベージコレクションイベントが発生するたびに報告します。
-verbose:jni
ネイティブメソッドの使用およびその他の Java Native Interface (JNI) アクティビティーに関する情報を報告します。
-version
バージョン情報を表示して終了します。
-version
コマンド行に指定されたクラスまたは JAR ファイルが、release で指定されたバージョンを必要としていることを示します。起動された java コマンドのバージョンがこの指定内容を満たさず、かつ適切な実装がシステム上で見つかった場合には、その適切な実装が使用されます。

release では、特定のバージョンを指定できるだけでなく、バージョン文字列と呼ばれるバージョンのリストを指定することもできます。バージョン文字列は、いくつかのバージョン範囲を空白で区切った形式の順序付きリストです。バージョン範囲は、バージョン ID、バージョン ID の後にアスタリスク (*) を付加したもの、バージョン ID の後にプラス記号 (+) を付加したもの、2 つのバージョン範囲をアンパサンド (&) で結合したもの、のいずれかになります。アスタリスクはプレフィックス一致を、プラス記号は指定されたバージョン以上を、アンパサンドは 2 つのバージョン範囲の論理積を、それぞれ意味します。例を示します。

-version:"1.5.0_04 1.5*&1.5.1_02+"
上記の意味は、バージョン 1.5.0_04、または 1.5.1_02 以上で 1.5 をバージョン ID プレフィックスとして持つバージョン、のいずれかをクラスまたは JAR ファイルが必要とする、ということです。バージョン文字列の厳密な構文や定義については、「Java Network Launching Protocol & API Specification (JSR-56)」の「Appendix A」を参照してください。

JAR ファイルの場合は通常、バージョン要件をコマンド行に指定するよりも、JAR ファイルのマニフェスト内に指定することが推奨されています。

このオプションの使用に関する重要なポリシー情報については、後述の「注」節を参照してください。

-showversion
バージョン情報を表示して続行します。
-?
-help
使用法を表示して終了します。
-X
非標準オプションに関する情報を表示して終了します。

非標準オプション

-Xint
インタプリタ専用モードで動作します。ネイティブコードへのコンパイルは無効になり、すべてのバイトコードがインタプリタによって実行されます。Java HotSpot Client VM 対応のコンパイラが提供するパフォーマンス上の利点は、このモードでは実現されません。
-Xbatch
バックグラウンドコンパイルを無効にします。通常、VM では、バックグラウンドコンパイルが終了するまで、メソッドをバックグラウンドタスクとしてコンパイルし、インタプリタモードでメソッドを実行します。-Xbatch フラグを指定すると、バックグラウンドコンパイルが無効になり、すべてのメソッドのコンパイルが完了するまでフォアグラウンドタスクとして処理されます。
-Xbootclasspath:bootclasspath
ブートクラスファイルを検索するディレクトリ、JAR アーカイブ、および ZIP アーカイブをセミコロンで区切ったリストで指定します。指定したパスに存在するブートクラスファイルが、Java 2 SDK に含まれるブートクラスファイルの代わりに使用されます。Note:rt.jar 内のクラスをオーバーライドする目的でこのオプションを使用するアプリケーションは、システムに配置しないでください。Java 2 Runtime Environment バイナリコードライセンス違反になります。
-Xbootclasspath/a:path
ディレクトリ、JAR アーカイブ、および ZIP アーカイブのパスをセミコロンで区切って指定します。パスはデフォルトのブートストラップクラスパスの後ろに追加されます。
-Xbootclasspath/p:path
ディレクトリ、JAR アーカイブ、および ZIP アーカイブのパスをセミコロンで区切って指定します。パスはデフォルトのブートストラップクラスパスの前に追加されます。Note:rt.jar 内のクラスをオーバーライドする目的でこのオプションを使用するアプリケーションは、システムに配置しないでください。Java 2 Runtime Environment バイナリコードライセンス違反になります。
-Xcheck:jni
Java Native Interface (JNI) 機能に対して追加チェックを行います。具体的には、Java 仮想マシンは JNI 要求を処理する前に、JNI 関数に渡されるパラメータと、実行環境のデータを検証します。無効なデータが見つかった場合は、ネイティブコードに問題があることを示しているため、Java 仮想マシンは致命的エラーを発生して終了します。このオプションを使用すると、パフォーマンス低下が予想されます。
-Xfuture
クラスとファイルの形式を厳密にチェックします。下位互換性を保つため、Java 2 SDK の仮想マシンが実行するデフォルトの形式チェックは、JDK ソフトウェアのバージョン 1.1.x が実行するチェックと同程度の厳密さになっています。-Xfuture フラグを指定すると、クラスファイル形式の仕様への準拠を強化するためのより厳密なチェックが有効になります。Java アプリケーション起動ツールの将来のリリースでは、より厳密なチェックがデフォルトになるため、新しいコードを開発するときにはこのフラグを使用することをお勧めします。
-Xnoclassgc
クラスのガベージコレクションを無効にします。このオプションを使用すると、ロード済みクラスからメモリーが回復されることがなくなるため、全体的なメモリー使用量が増大します。この場合、アプリケーションによっては OutOfMemoryError がスローされる可能性があります。
-Xincgc
インクリメンタルガーベジコレクタを有効にします。インクリメンタルガベージコレクタは、デフォルトでは無効になっています。 有効にすると、プログラムの実行中にガベージコレクションによる一時停止が発生しなくなります。インクリメンタルガベージコレクタは、プログラムと同時に実行することがあり、この場合、プログラムの利用できるプロセッサ能力が低下します。
-Xloggc:file
-verbose:gc と同様にガベージコレクションイベントが発生するたびに報告しますが、そのデータを file に記録します。-verbose:gc を指定したときに報告される情報のほかに、報告される各イベントの先頭に、最初のガベージコレクションイベントからの経過時間 (秒単位) が付け加えられます。

ネットワークの応答時間によって JVM の実行速度が低下するのを避けるため、このファイルの格納先は、常にローカルファイルシステムにしてください。ファイルシステムが満杯になると、ファイルは切り詰められ、そのファイルにデータが引き続き記録されます。このオプションと -verbose:gc の両方がコマンド行に指定されている場合は、このオプションが優先されます。

-Xmsn
メモリー割り当てプールの初期サイズをバイト数で指定します。指定する値は、1M バイトより大きい 1024 の倍数にしなければなりません。キロバイトを指定するには、文字 k または K を付けます。メガバイトを指定するには、文字 m または M を付けます。デフォルト値は、実行時にシステムの設定に基づいて選択されます。詳細については、「HotSpot Ergonomics」を参照してください。
例:
       -Xms6291456
       -Xms6144k
       -Xms6m
       
-Xmxn
メモリー割り当てプールの最大サイズをバイト数で指定します。指定する値は、2M バイトより大きい 1024 の倍数にしなければなりません。キロバイトを指定するには、文字 k または K を付けます。メガバイトを指定するには、文字 m または M を付けます。 デフォルト値は、実行時にシステムの設定に基づいて選択されます。詳細については、「HotSpot Ergonomics 」を参照してください。
例:
       -Xmx83886080
       -Xmx81920k
       -Xmx80m
       
-Xprof
実行中のプログラムのプロファイルを生成し、プロファイリングデータを標準出力に出力します。このオプションは、プログラム開発用のユーティリティーとして提供されています。本番稼動システムでの使用を目的としたものではありません。
-Xrs
Java 仮想マシン (JVM) によるオペレーティングシステムシグナルの使用を減らします。このオプションは、J2SE 1.3.1 以降で利用可能になりました。

J2SE 1.3.0 では、Java アプリケーションを秩序正しくシャットダウンするためのシャットダウンフック機能が追加されました。この機能により、JVM が突然終了した場合でも、シャットダウン時にユーザークリーンアップコード (データベース接続のクローズなど) を実行できるようになりました。

JVM は、コンソール制御イベントを監視して JVM の異常終了を検知することにより、シャットダウンのフックを実現します。具体的には、JVM は、シャットダウンフック処理を開始するコンソール制御ハンドラを登録し、CTRL_C_EVENT、CTRL_CLOSE_EVENT、CTRL_LOGOFF_EVENT、および CTRL_SHUTDOWN_EVENT に対して TRUE を返します。

JVM は、デバッグの目的でスレッドスタックをダンプするという、1.2 より前からある機能を実現するためにも、同様の機構を使用します。Sun の JVM は、スレッドダンプを実行するために CTRL_BREAK_EVENT を使用します。

JVM がサービス (Web サーバー用のサーブレットエンジンなど) として実行されている場合、JVM は、CTRL_LOGOFF_EVENT を受け取ってもシャットダウン処理を開始してはいけません。そのとき、オペレーティングシステムは、実際にはプロセスを終了させないからです。この例のような障害の可能性を避けるため、J2SE 1.3.1 以降では -Xrs コマンド行オプションが追加されました。Sun の JVM で -Xrs オプションを使用すると、JVM は、コンソール制御ハンドラをインストールしません。この場合、JVM は、CTRL_C_EVENT、CTRL_CLOSE_EVENT、CTRL_LOGOFF_EVENT、および CTRL_SHUTDOWN_EVENT の監視と処理を行いません。

-Xrs を指定した場合、次の 2 つの影響があります。

  • Ctrl + Break キーによるスレッドダンプを利用できない
  • シャットダウンフック処理の実行は、JVM が終了しようとしている時点で System.exit() を呼び出すなどして、ユーザーコード側で行う必要がある
-Xssn
スレッドのスタックサイズを設定します。
注:-version:release コマンド行オプションでは、どんなに複雑にリリースを指定してもかまいません。ただし、現実的なリリース指定の限られたサブセットを使用するだけでも適切なポリシーを表現できるため、それらのサブセットのみが完全にサポートされます。それらのポリシーを次に示します。

  1. 任意のバージョン。これは、このオプションを使用しないことで表現できます。
  2. ある特定のバージョン ID よりも大きい任意のバージョン。次に例を示します。
    "1.5.0_03+"
    

    この場合、1.5.0_03 よりも大きい任意のバージョンが使用されます。これは、指定されたバージョンで特定のインタフェースが導入された (あるいはそのバグが修正された) 場合に便利です。

  3. ある特定のバージョン ID よりも大きいバージョン。ただし、そのリリースファミリの上限によって制限するもの。例を示します。
    "1.5.0_03+&1.5*"
    
  4. 上の項目 2 または 3 の「OR」表現。例を示します。
    "1.4.2_05+&1.4* 1.5+"
    
    これは項目 2 に似ていますが、ある変更が特定のリリース (1.5) で導入されたが、その同じ変更が以前のリリースのアップデートでも利用可能になった、という場合に便利です。

関連項目


Copyright © 2002-2006 Sun Microsystems, Inc.All Rights Reserved.

Sun
Java Software