javacによるJava ** .classファイルのコンパイル
1概要
このチュートリアルでは、
javac
ツールを紹介し、それを使用してJavaソースファイルをクラスファイルにコンパイルする方法について説明します。
javac
コマンドの簡単な説明から始めて、そのさまざまなオプションを見てツールをさらに詳しく調べます。
2
javac
コマンド
javac
ツールを実行するときに、オプションとソースファイルを指定できます。
javac[options][source-files]----
ここで、__[options]__はツールの操作を制御するオプションを表し、__[source-files]__はコンパイルする1つ以上のソースファイルを表します。
すべてのオプションは確かに完全にオプションです。ソースファイルは、__javac__コマンドの引数として直接指定することも、後で説明するように参照される引数ファイルに保存することもできます。 ** ソースファイルはそれらが含む型の完全修飾名に対応するディレクトリ階層に配置されるべきであることに注意してください。
__javac__のオプションは、標準、クロスコンパイル、および追加の3つのグループに分類されます。この記事では、標準オプションと追加オプションについて説明します。
クロスコンパイルオプションは、コンパイラの環境とは異なるJVM実装に対して型定義をコンパイルするという、あまり一般的ではないユースケースに使用され、対処されません。
=== ** 3型定義**
__javac__オプションを説明するために使用するクラスを紹介することから始めましょう。
[source,java,gutter:,true]
public class Data {
List<String> textList = new ArrayList();
public void addText(String text) { textList.add(text); }
public List getTextList() { return this.textList; } }
ソースコードはファイル__com/baeldung/javac/Data.java__にあります。 この記事では** nixファイル区切り文字を使用しています。 Windowsマシンでは、スラッシュ( '__/' __)の代わりにバックスラッシュ( '__ \' __)を使用する必要があります。 === ** 4標準オプション __javac__コマンドの最も一般的に使用される標準オプションの1つは__-d__です。** は生成されたクラスファイルの保存先ディレクトリを指定します** 。 タイプがデフォルトパッケージの一部ではない場合、そのタイプのクラスファイルを保持するために、パッケージの名前を反映したディレクトリ構造が作成されます。 前のセクションで提供した構造を含むディレクトリで次のコマンドを実行しましょう。 [source,bash,gutter:,true]
javac -d javac-target com/baeldung/javac/Data.java
__javac__コンパイラはクラスファイル__javac-target/com/baeldung/javac/Data.class__を生成します。システムによっては、__javac__が自動的にターゲットディレクトリを作成しないことに注意してください。この場合は__javac-target__です。したがって、手動で行う必要があるかもしれません。 他によく使われるオプションがいくつかあります。 ** ** __- cp__(または__-classpath__、__ – class-path__) - ** 場所の種類を指定する 私たちのソースファイルをコンパイルするのに必要なものが見つかります。このオプションがなく、__CLASSPATH__環境変数が設定されていない場合は、代わりに現在の作業ディレクトリが使用されます(上記の例のように)。 ** ** __- p__(または__ – module-path__) - ** は、必要な場所を示します。 アプリケーションモジュールこのオプションは、Java 9以降にのみ適用されます。Java9モジュールシステムのガイドについては、/project-jigsaw-java-modularity[このチュートリアル]を参照してください。 コンパイル処理中に何が起こっているのか知りたい場合 どのクラスがロードされ、どのクラスがコンパイルされるかについては、__-verbose__オプションを適用できます。 最後に取り上げる標準的なオプションは引数ファイルです。 ** __javac__ツールに直接引数を渡す代わりに、引数ファイルに格納することができます** 。これらのファイルの名前には、接頭辞「@ __」を付けて、コマンド引数として使用されます。 __javac__コマンドが '@ __' __で始まる引数を見つけると、次の文字をファイルへのパスとして解釈し、ファイルの内容を引数リストに展開します。そのような引数ファイルに含まれる引数を区切るために、スペースと改行文字を使用することができます。 __javac-args__ディレクトリに、__options__と__types__という2つのファイルがあり、次の内容が含まれているとします。 __options__ファイル: [source,text,gutter:,true]
-d javac-target
-verbose
__types__ファイル: [source,text,gutter:,true]
com/baeldung/javac/Data.java
このコマンドを実行すると、コンソールに詳細メッセージが表示された状態で__Data__タイプをコンパイルできます。 [source,bash,gutter:,true]
javac @javac-args/options @javac-args/types
引数を別々のファイルに保存するのではなく、それらすべてを単一のファイルに保存することもできます。 __javac-args__ディレクトリに__arguments__という名前のファイルがあるとします。 [source,text,gutter:,true]
-d javac-target -verbose
com/baeldung/javac/Data.java
____の前の2つの別々のファイルと同じ結果になるように、このファイルを__javac__にフィードしてみましょう。 [source,bash,gutter:,true]
javac @javac-args/arguments
このセクションで行ったオプションは最も一般的なものだけです。標準の__javac__オプションの完全なリストについては、https://docs.oracle.com/javase/9/tools/javac.htm#GUID-AEEC9F07-CB49-4E96-8BC7-BCC2C7F725C9____STANDARDOPTIONSFORJAVAC-7D3D9CC2を参照してください。 === ** 5追加オプション** __javac__の追加オプションは、現在のコンパイラの実装に固有のものであり、将来変更される可能性がある非標準のオプションです。そのため、これらのオプションについて詳しくは説明しません。 ただし、__-Xlint__という、非常に便利で言及に値するオプションがあります。その他の__javac__追加オプションの詳細については、https://docs.oracle.com/javase/9/tools/javac.htm#GUID-AEEC9F07-CB49-4E96-8BC7-BCC2C7F725C9____NONSTANDARDOPTIONSFORJAVAC-7D3DAA9D]linkに従ってください。 ** __-Xlint__オプションはコンパイル時に警告を有効にすることを可能にします** 。 コマンドラインでこのオプションを指定する方法は2つあります。 ** ** __- Xlint –__ ** はすべての推奨警告を表示します ** ** __- Xlint:key[、key]** –__ ** は特定の警告を有効にする ここにいくつかの最も便利な__-Xlint__キーがあります: ** ** __rawtypes –__ ** は生の型の使用について警告します ** ** __unchecked –__ ** は未チェックの操作について警告します ** ** __static –__ ** は、静的メンバーへの静的メンバーへのアクセスについて警告します。 インスタンスメンバー ** ** __cast –__ ** は不要なキャストについて警告します ** ** __serial –__ ** は、直列化可能クラスに __serialversionUID__ ** ** __fallthrough –__ ** は__switch__での転倒について警告します ステートメント 次に、__javac-args__ディレクトリに__xlint-ops__という名前のファイルを作成し、次の内容を作成します。 [source,text,gutter:,true]
-d javac-target
-Xlint:rawtypes,unchecked
com/baeldung/javac/Data.java
このコマンドを実行すると: [source,bash,gutter:,true]
javac @javac-args/xlint-ops
__rawtypes__と__unchecked__の警告が表示されるはずです。 [source,text,gutter:,false]
com/baeldung/javac/Data.java:7: warning:[rawtypes]found raw type: ArrayList
List<String> textList = new ArrayList();
^
missing type arguments for generic class ArrayList<E>
where E is a type-variable:
E extends Object declared in class ArrayList
com/baeldung/javac/Data.java:7: warning:[unchecked]unchecked conversion
List<String> textList = new ArrayList();
^
required: List<String>
found: ArrayList
…
=== ** 6. 結論** このチュートリアルでは__javac__ツールを使って、典型的なコンパイルプロセスを管理するためのオプションの使い方を説明しました。 実際には、__javac__に直接頼るのではなく、通常IDEまたはビルドツールを使用してプログラムをコンパイルします。しかし、このツールをしっかり理解すれば、高度なユースケースでコンパイルをカスタマイズすることができます。 いつものように、このチュートリアルのソースコードはhttps://github.com/eugenp/tutorials/tree/master/core-java/[GitHubの上に]を見つけることができます。