1. 概要

コマンドラインでJavaプログラムをコンパイルする場合、予想されるコマンドラインオプションまたは引数に不一致があるとエラーが発生することが予想されます。

このチュートリアルでは、最初に「注釈処理が明示的に要求された場合にのみクラス名が受け入れられる」エラーを調査します。 次に、他の一般的なコンパイルエラーをいくつか見ていきます。

2. エラーの例

次のクラスDemoClassがあると想像してみましょう。

package com.baeldung;

public class DemoClass {
    // fields and methods
}

それでは、 javac コマンドを使用して、DemoClassをコンパイルしてみましょう。

javac DemoClass

上記のコマンドはエラーになります:

error: Class names, 'DemoClass', are only accepted if annotation processing is explicitly requested
1 error

DemoClass には注釈処理に関連するコードがないため、エラーは注釈処理に関連しているようで、少しわかりにくいです。 このエラーの実際の理由は、DemoClassが注釈処理ソースファイルではないためです。

注釈処理ソースファイルは、コンパイル時に追加のソースコードを生成するための便利な手法です。 標準のJavaソースファイルとは対照的に、これらのソースファイルをコンパイルするために、。javaファイル拡張子を提供する必要はありません。

3. 問題の解決

DemoClassを正しいファイル名拡張子で再度コンパイルしてみましょう。java

javac DemoClass.java

予想どおり、ソースファイルはDemoClass.classファイルにコンパイルされます。

4. 追加のヒントとコツ

正しいコンパイル方法がわかれば簡単に修正できますが、アプリケーションのコンパイルや実行中にも同様の問題が発生する可能性があります。

 4.1. 間違ったファイル拡張子を使用する

ここで、タイプミスのある次のコマンドを使用してソースファイルをコンパイルしてみましょう–すべて大文字の「。JAVA」

javac DemoClass.JAVA

これを行うと、上記で見たのと同じエラーメッセージが生成されます。

error: Class names, 'DemoClass.JAVA', are only accepted if annotation processing is explicitly requested
1 error

4.2. メインクラスエラー

mainメソッドを持つDemoApplicationクラスがあると想像してみてください。

public class DemoApplication {

    public static void main(String[] args) {
        System.out.println("This is a DemoApplication");
    }
}

javaコマンドを使用してアプリケーションを実行してみましょう。

java DemoApplication.class

結果はClassNotFoundExceptionです。

Error: Could not find or load main class DemoApplication.Class
Caused by: java.lang.ClassNotFoundException: DemoApplication.Class

それでは、 .class。javaでさえも、ファイル拡張子なしでアプリケーションを実行してみましょう。

java DemoApplication

コンソールに出力が表示されます。

This is a DemoApplication

5. 結論

この記事では、。java ファイル拡張子の誤った使用または省略が、コマンドラインからクラスをコンパイルするときにエラーを引き起こす方法を学びました。 また、スタンドアロンアプリケーションのコンパイルと実行の両方で、コマンドライン引数の誤った使用に関連する他のいくつかのエラーが発生しました。