Error de javac: los nombres de clase solo se aceptan si el procesamiento de anotaciones se solicita explícitamente

113

Recibo este error cuando compilo mi programa java:

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

Aquí está el código java (lo estoy ejecutando en 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);
        }
    }
}

Aquí está el comando javac:

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

¿Cómo compilo este programa?

usuario513164
fuente

Respuestas:

132

Al menos necesita agregar la .javaextensión al nombre del archivo en esta línea:

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

De las preguntas frecuentes oficiales :

Los nombres de clase, 'HelloWorldApp', solo se aceptan si el procesamiento de anotaciones se solicita explícitamente

Si recibe este error, olvidó incluir el sufijo .java al compilar el programa. Recuerde, el comando es javac HelloWorldApp.java, no javac HelloWorldApp.

Además, en su segundo ejemplo de javac, (en el que realmente incluyó .java), debe incluir todos los archivos .jar necesarios para la compilación.

aioobe
fuente
1
eso también, pero creo que todavía no habría producido ese error en particular. Debería haber arrojado un "archivo no encontrado" o algo por el estilo.
jwenting
Yo estaría de acuerdo. Especialmente porque es un error fácil de cometer (ya que .classdebe omitirse al iniciar con java).
aioobe
"Los nombres de clase, 'HelloWorldApp', solo se aceptan si se solicita explícitamente el procesamiento de anotaciones". Qué forma más estúpida de decir archivo no encontrado. ¿O a qué se supone que se refiere el mensaje de error? Solo puedo encontrar esta solución, pero no por qué el mensaje de error está redactado así.
masterxilo
1
Con el procesamiento de anotaciones habilitado, puede generar clases mediante programación durante la compilación. Entonces, con el procesamiento de anotaciones, de hecho, podría compilar algo aunque el archivo no exista (es decir, crea las partes faltantes sobre la marcha). Por supuesto, el mensaje de error es engañoso. Me pondré en contacto con usted si lo analizo más a fondo.
aioobe
19

Esto también me dejó perplejo porque estaba incluyendo la extensión .Java ... luego noté la J mayúscula.

Esto también provocará el error "procesamiento de anotaciones":

javac myclass.Java 

En cambio, debería ser:

javac myclass.java 
Tom Warfield
fuente
6

Usando javac ClassName.java para compilar el programa, luego use java ClassName para ejecutar el código compilado. No puede mezclar javac solo con ClassName (sin la extensión java).

Yong Yuan
fuente
5

El error "Los nombres de clase solo se aceptan si se solicita explícitamente el procesamiento de anotaciones" puede deberse a uno o más de los siguientes:

  1. No usar la extensión .java para su archivo java al compilar.
  2. Uso incorrecto de mayúsculas en la extensión .java (es decir, .Java) al compilar.
  3. Cualquier otro error tipográfico en la extensión .java al compilar.
  4. Cuando se compila y se ejecuta al mismo tiempo, se olvida usar '&&' para concatenar los dos comandos (es decir, javac Hangman.java java Hangman). Me tomó como 30 minutos resolver esto, lo cual noté al ejecutar la compilación y el programa por separado, lo que por supuesto funcionó perfectamente bien.

Es posible que esta no sea la lista completa de causas de este error, pero estas son las causas que conozco hasta ahora.

Joshgoldeneagle
fuente
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

Entonces, si por error después de compilar nuevamente, use javacpara ejecutar un programa.

chandan
fuente
3

Aprendí que también puede obtener este error almacenando el archivo fuente en una carpeta llamada Java

David Miller
fuente
2

Creo que esto también se debe a una compilación incorrecta.

entonces para linux (ubuntu) .....

archivo javac.java

archivo java

Amol Jagdale
fuente
3
Las respuestas deben tratar de elaborar en señalar por qué el problema está siendo causado en primer lugar y luego señalar la solución (si está disponible)
Coder
1

Cómo puedes reproducir este error críptico en la terminal de Ubuntu:

Pon esto en un archivo llamado Main.java:

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

Luego compílelo así:

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

Es porque no especificaste .javaal final deMain .

Hágalo así, y funciona:

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

Date una palmada en la frente ahora y quéjate de que el mensaje de error es tan críptico.

Eric Leschinski
fuente
2
tú tampoco: D! escribiste Main sin .java en ambos ejemplos!
Freerunner
1

Quizás esté compilando con el nombre del archivo en lugar del nombre del método ... Verifique una vez que yo también cometí el mismo error pero lo corrigí rápidamente ..... # happy Coding

Sai Saran
fuente
0

Primero descargue jdk de https://www.oracle.com/technetwork/java/javase/downloads/index.html . Luego, en la búsqueda, escriba Editar las variables de entorno del sistema. En la ventana abierta, presiono la parte inferior llamada Variables de entorno. Luego, en las variables del sistema, ingrese la descripción de la imagen aquí. Presione la parte inferior nueva. En el campo, las nuevas variables, escriba "Ruta". C: \ Archivos de programa \ Java \ jdk1.8.0_191 \ bin "pero en mi sistema operativo solo funciona este" C: \ Archivos de programa \ Java \ jdk1.8.0_191 \ bin \ javac.exe " ingrese la descripción de la imagen aquí presione ok 3 veces

Inicie Cmd. Presiono ventanas inferiores + R. Luego escribo cmd. En cmd escriba "cd (su directorio con código)" se parece a C: \ Users \ user \ IdeaProjects \ app \ src. Luego escriba "javac (nombre de su clase principal para su programa) .java" se parece a blabla.java y javac crea un código de bytes como (nombre de su clase principal) .class en su directorio. última escritura en cmd "java (nombre de su clase principal)" y mi programa comienza a funcionar

Señor tintin
fuente
0

Error: el nombre de la clase solo se acepta si el procesamiento de anotaciones se solicita explícitamente

Para evitar este error, debe usar el comando javac con la extensión .java.

Javac DescendingOrder.java <- esto funciona perfectamente.

Avnish
fuente
0

Si compila varios archivos en la misma línea, asegúrese de usar javac solo una vez y no para cada archivo de clase.

Incorrecto: ingrese la descripción de la imagen aquí

Correcto: ingrese la descripción de la imagen aquí

Kiran
fuente