JVM は、作成したコードを直接実行できません。バイトコードで書かれたプログラムを実行する方法だけを知っています。バイトコードは、マシンコードに近い低水準言語です。

Java の場合、コンパイルとは、Java で書かれた (高レベルの) プログラムをバイトコードで書かれた同じプログラムに変換することです。

コードは .java ファイルとしてコンパイラに渡されます。コンパイラがコード内にエラーを検出しなかった場合は、新しいバイトコード ファイルが返されます。このファイルの名前は同じですが、拡張子が異なります: .class。コードにエラーがある場合、コンパイラは「プログラムはコンパイルされませんでした」と通知します。次に、各エラー メッセージを読んでエラーを修正する必要があります。

javac コマンドを使用して、JDK (Java Development Kit) の一部であるコンパイラを呼び出します。つまり、JRE (Java ランタイム環境) のみをインストールした場合、コンパイラはインストールされないということです。バイトコードのみを実行できる JVM のみが存在します。そこで、JDK をインストールし、.javaファイルをコンパイラに渡します。

たとえば、コンソール出力を含む単純なプログラムを考えてみましょう。


class MySolution {
   public static void main(String[] args) {
      System.out.println("Hi, command line!");
   }
}

このコードをファイルD:/temp/MySolution.javaに保存しましょう。

コマンドを使用してコードをコンパイルしましょう


D:\temp>javac MySolution.java

コードにコンパイル エラーがない場合、MySolution.classファイルが一時フォルダーに表示されます。さらに、コードを含むMySolution.javaファイルはどこにも行きません。それはまさに元の場所に残っています。ただし、MySolution.class にはバイトコードが含まれており、JVM によって直接実行できるようになりました。

この例は可能な限り単純ですが、大規模で最も複雑なプロジェクトでもjavacコマンドを使用します。したがって、それがどのように機能するかを知ることは非常に役立ちます。

一度に複数のクラスをコンパイルできます。たとえば、tempフォルダーに別のファイルCat.javaがあるとします。


D:\temp>javac MySolution.java Cat.java

またはこれ:


D:\temp>javac *.java

コンパイルが完了すると、.classファイルはjarファイルにパッケージ化され、別のコンピュータに簡単に移動して実行できます。jarファイルの作成方法の例を次に示します。


D:\temp>jar cvfe myjar.jar MySolution MySolution.class Cat.class

どこ:

  • jar は、JDK に含まれる.jarファイルを作成するためのコマンドです。

  • cvfe は、次の意味を持つコマンド ライン オプションです。

    • c – 新しいjarファイルを作成します

    • v – 詳細情報を表示する

    • f – ツールの出力をファイル ( myjar.jar )に入れることを示します。

    • e – エントリ ポイント ( MySolution )、つまりメインメソッドを含むクラスを示します。

  • MySolution.java Cat.class – jarファイルにパックされるファイルのスペース区切りの名前。

結果のjarファイルを実行する方法は次のとおりです。


D:\temp>java -jar myjar.jar
さらに詳しい情報については:
javacツールとjarツールにはヘルプ組み込まれています。これを表示するには、コマンド ラインで次のコマンドを実行します。
  • javac --ヘルプ
  • jar --ヘルプ