javacエラー:注釈処理が明示的に要求された場合にのみクラス名が受け入れられます


112

Javaプログラムをコンパイルすると、このエラーが発生します。

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

これがJavaコードです(私はこれをUbuntuで実行しています)。

import jcuda.CUDA;    
import jcuda.driver.CUdevprop;    
import jcuda.driver.types.CUdevice;

public class EnumDevices {

  public static void main(String args[]) {
     CUDA cuda = new CUDA(true);    
        int count = cuda.getDeviceCount();

        System.out.println("Total number of devices: " + count);

        for (int i = 0; i < count; i++) {

          CUdevice dev = cuda.getDevice(i);
          String name = cuda.getDeviceName(dev);
          System.out.println("Name: " + name);
          int version[] = cuda.getDeviceComputeCapability(dev);

          System.out.println("Version: " + 
              String.format("%d.%d", version[0], version[1]));
          CUdevprop prop = cuda.getDeviceProperties(dev);
          System.out.println("Clock rate: " + prop.clockRate + " MHz");
          System.out.println("Threads per block: " + prop.maxThreadsPerBlock);
        }
    }
}

javacコマンドは次のとおりです。

javac -cp /home/manish.yadav/Desktop/JCuda-All-0.3.2-bin-linux-x86_64 EnumDevices

このプログラムをコンパイルするにはどうすればよいですか?

回答:


132

少なくとも.java、次の行でファイル名に拡張子を追加する必要があります。

javac -cp /home/manish.yadav/Desktop/JCuda-All-0.3.2-bin-linux-x86_64 EnumDevices

公式FAQから:

クラス名「HelloWorldApp」は、注釈処理が明示的に要求された場合にのみ受け入れられます

このエラーを受け取った場合、プログラムのコンパイル時に.javaサフィックスを含めるのを忘れていました。コマンドはjavac HelloWorldAppではなくjavac HelloWorldApp.javaであることに注意してください。

また、2番目のjavac-example(実際にインクルードしたもの.java)には、コンパイルに必要なすべての必要な.jarファイルをインクルードする必要があります。


1
それもそうですが、それでも私はその特定のエラーは発生しなかったと思います。「ファイルが見つかりません」またはそれらの行に沿って何かを生成する必要があります。
2011

同意します。特にそれを行うのは簡単な間違いです(で.class起動する場合はを省略する必要があるためjava)。
aioobe

「クラス名「HelloWorldApp」は、注釈処理が明示的に要求された場合にのみ受け入れられます。」ファイルが見つからないと言うなんて愚かな方法。または、参照するはずのエラーメッセージは何ですか?私はこの修正を見つけることができるだけですが、エラーメッセージがそのように書かれている理由はわかりません。
masterxilo 2014年

1
注釈処理を有効にすると、コンパイル時にプログラムでクラスを生成できます。そのため、注釈処理を使用すると、ファイルが存在しない場合でも実際に何かをコンパイルできます(つまり、不足しているパーツをその場で作成します)。確かに、エラーメッセージは誤解を招くものです。さらに詳しく調べれば、折り返しご連絡いたします。
aioobe 2014年

19

.Java拡張子を含めていたので、これにも困惑していました...大文字のJに気づきました。

これにより、「注釈処理」エラーも発生します。

javac myclass.Java 

代わりに、それは:

javac myclass.java 

6

javac ClassName.javaを使用してプログラムをコンパイルし、次にjava ClassNameを使用してコンパイルされたコードを実行します。javacとClassNameのみ(java拡張なし)を混在させることはできません。


4

「クラス名は、注釈処理が明示的に要求された場合にのみ受け入れられます」というエラーは、次の1つ以上が原因である可能性があります。

  1. コンパイル時にJavaファイルに.java拡張子を使用しない。
  2. コンパイル時の.java拡張子(つまり.Java)の不適切な大文字使用。
  3. コンパイル時の.java拡張子のその他のタイプミス。
  4. コンパイルと実行を同時に行う場合、「&&」を使用して2つのコマンドを連結するのを忘れます(つまり、javac Hangman.java java Hangman)。これを理解するのに30分ほどかかりました。コンパイルとプログラムを別々に実行することで気づきましたが、もちろん完全に問題なく動作しました。

これはこのエラーの原因の完全なリストではない可能性がありますが、これらは私がこれまでに認識している原因です。


3
chandan@cmaster:~/More$ javac New.java
chandan@cmaster:~/More$ javac New
error: Class names, 'New', are only accepted if annotation processing is explicitly requested
1 error

そのjavacため、誤ってコンパイルした後、プログラムを実行するために使用してください。


3

Javaという名前のフォルダーにソースファイルを保存することでも、このエラーが発生する可能性があることを学びました


2

これも不正なコンパイルが原因だと思います。

Linux(ubuntu).....

javac file.java

Javaファイル


3
回答では、まず問題が発生している理由を指摘し、次に解決策を提示します(利用可能な場合)
Coder

0

Ubuntuターミナルでこの不可解なエラーを再現する方法:

これをMain.javaというファイルに入れます。

public Main{
    public static void main(String[] args){
        System.out.println("ok");
    }
}

次に、次のようにコンパイルします。

user@defiant /home/user $ javac Main
error: Class names, 'Main', are only accepted if 
annotation processing is explicitly requested
1 error

.java最後に指定しなかったからですMain

このようにしてください、そしてそれはうまくいきます:

user@defiant /home/user $ javac Main.java
user@defiant /home/user $

ここで額をたたいて、エラーメッセージが非常にわかりにくいと不平を言います。


2
あなたもしませんでした:D!両方の例で.javaなしでMainを記述しました。
freerunner

0

おそらく、メソッド名ではなくファイル名でコンパイルしている可能性があります....私も同じ間違いを犯したが、すぐに修正したことを確認してください.....#happy Coding


0

最初にhttps://www.oracle.com/technetwork/java/javase/downloads/index.htmlからjdkをダウンロードします。次に、検索でシステム環境変数を編集します。開いているウィンドウで、環境変数と呼ばれる下部を押します。システム変数で、ここに画像の説明を入力します。 下部を押します。新しいフィールドに新しい変数を書きます。「パス」フィールドに新しい値を書きます。 C:\ Program Files \ Java \ jdk1.8.0_191 \ bin "ですが、私のOSで動作するのはこの" C:\ Program Files \ Java \ jdk1.8.0_191 \ bin \ javac.exe "のみ ですここに画像の説明を入力して[ ok]を3回押してください

Cmdを起動します。下のウィンドウ+ Rを押します。次に、cmdと書き込みます。cmdに「cd(コードを含むディレクトリ)」と入力すると、C:\ Users \ user \ IdeaProjects \ app \ srcのようになります。次に、「javac(プログラムのメインクラスの名前).java」と書きます。blabla.javaのようになり、javacが(メインクラスの名前).classのようなバイトコードをディレクトリに作成します。最後にcmd "java(メインクラスの名前)"を書き込んで、私のプログラムが作業を開始します


0

エラー:クラス名は、注釈処理が明示的に要求されている場合にのみ受け入れられます

このエラーを回避するには、拡張子が.javaのjavacコマンドを使用する必要があります。

Javac DescendingOrder.java <-これは完全に機能します。


0

同じ行で複数のファイルをコンパイルする場合、すべてのクラスファイルに対してではなく、javacを1回だけ使用するようにしてください。

不正解: ここに画像の説明を入力してください

正しい: ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.