コマンドラインからJavaアプリケーションを実行する

1. 概要

通常、すべての意味のあるアプリケーションには、依存関係として1つ以上のJARファイルが含まれます。 ただし、JARファイル自体がスタンドアロンアプリケーションまたはWebアプリケーションを表す場合があります。
この記事では、スタンドアロンアプリケーションのシナリオに焦点を当てます。 以下、これをJARアプリケーションと呼びます。
このチュートリアルでは、まずJARアプリケーションを作成する方法を学びます。 後で、*コマンドライン引数を使用して、または使用せずに* JARアプリケーションを実行する方法を学習します*。

2. * JAR *アプリケーションを作成する

A link:/java-create-jar[JAR file]には、1つ以上のメインクラスを含めることができます。 *各メインクラスはアプリケーションのエントリポイントです*。 そのため、理論的には、JARファイルには複数のアプリケーションを含めることができますが、実行するには少なくとも1つのメインクラスを含める必要があります。
  • JARファイルは、https://www.baeldung.com/java-jar-executable-manifest-main-class [manifest file] *に1つのエントリポイントを設定できます。 この場合、JARファイルはexecutable JARです。 メインクラスをそのJARファイルに含める必要があります。

    まず、クラスをコンパイルし、マニフェストファイルで実行可能JARを作成する方法の簡単な例を見てみましょう。
$ javac com/baeldung/jarArguments/*.java
$ jar cfm JarExample.jar ../resources/example_manifest.txt com/baeldung/jarArguments/*.class
非実行可能JARは、マニフェストファイルで_Main-Class_が定義されていないJARファイルです。 後で見るように、JARファイル自体に含まれるメインクラスを実行できます。
マニフェストファイルなしで実行不可能なJARを作成する方法は次のとおりです。
$ jar cf JarExample2.jar com/baeldung/jarArguments/*.class

3. Javaコマンドライン引数

他のアプリケーションと同様に、JARアプリケーションは、引数なしを含む任意の数の引数を受け入れます。 それはすべて、アプリケーションのニーズに依存します。
これにより、ユーザーは*アプリケーションの起動時に構成情報を指定できます*。
その結果、アプリケーションはハードコーディングされた値を回避でき、多くの異なるユースケースを処理できます。
引数には、任意の英数字、Unicode文字、およびシェルで許可される一部の特殊文字(「@」など)を含めることができます。
*引数は1つ以上のスペースで区切られます*。 引数にスペースを含める必要がある場合、スペースを引用符で囲む必要があります。 単一引用符または二重引用符のどちらでも問題ありません。
通常、一般的なJavaアプリケーションでは、アプリケーションを呼び出すときに、ユーザーはクラス名の後にコマンドライン引数を入力します。
ただし、JARアプリケーションの場合は常にそうとは限りません。
すでに説明したように、Javaメインクラスのエントリポイントはlink:/java-main-method[main method]です。 *引数はすべて__String__s *であり、_String_配列としてメインメソッドに渡されます。
ただし、アプリケーション内では、_String_配列の任意の要素を、_char _、_ int _、__ double __ **、**などのその他のデータ型に変換できますlink:/java-wrapper-classes [ *ラッパークラス、*]または他の適切なタイプ。

4. 引数付きの実行可能ファイル* JAR *を実行する

引数付きの実行可能JARファイルを実行するための基本的な構文を見てみましょう。
_ * java -jar jar-file-name [args…] * _
前に作成された実行可能JARは、渡された引数を出力するだけの単純なアプリケーションです。 任意の数の引数で実行できます。 以下は、2つの引数を持つ例です。
$ java -jar JarExample.jar "arg 1" [email protected]
コンソールに次の出力が表示されます。
Hello Baeldung Reader in JarExample!
There are 2 argument(s)!
Argument(1):arg 1
Argument(2):[email protected]
そのため、*実行可能JARを呼び出す場合、コマンドラインでメインクラス名を指定する必要はありません*。 JARファイル名の後に引数を追加するだけです。 実行可能なJARファイル名の後にクラス名を指定すると、実際のメインクラスの最初の引数になります。
ほとんどの場合、JARアプリケーションは実行可能なJARです。 実行可能JARには、https://www.baeldung.com/java-jar-executable-manifest-main-class [manifest file]で定義されている最大1つのメインクラスを含めることができます。
したがって、同じ実行可能JARファイル内の他のアプリケーションをマニフェストファイルに設定することはできませんが、非実行可能JARの場合と同じようにコマンドラインから実行することはできます。 次のセクションでその方法を正確に確認します。

5. 引数を使用して実行不可能な* JAR *を実行する

実行不可能なJARファイルでアプリケーションを実行するには、_- jar_の代わりに_-cp_オプションを使用する必要があります。 _-cp_オプション(クラスパスの略)を使用して、実行するクラスファイルを含むJARファイルを指定します。
_ * java -cp jar-file-name main-class-name [args…] * _
ご覧のとおり、*この場合、コマンドラインにメインクラス名を含め、その後に引数*を含める必要があります。
前に作成した非実行可能JARには、同じ単純なアプリケーションが含まれています。 任意の(ゼロを含む)引数で実行できます。 次に、2つの引数を持つ例を示します。
$ java -cp JarExample2.jar com.baeldung.jarArguments.JarExample "arg 1" [email protected]
また、上記で見たように、次の出力が表示されます。
Hello Baeldung Reader in JarExample!
There are 2 argument(s)!
Argument(1):arg 1
Argument(2):[email protected]

6. 結論

このチュートリアルでは、引数付きまたは引数なしでコマンドラインでJARアプリケーションを実行する2つの方法を学びました。
また、引数にスペースと特殊文字を含めることができることも示しました(シェルで許可されている場合)。
いつものように、例のコードはhttps://github.com/eugenp/tutorials/tree/master/core-java-modules/core-java-8-2[GitHub]で入手できます。