erro javac: nomes de classes são aceitos apenas se o processamento de anotação for explicitamente solicitado

113

Recebo este erro ao compilar meu programa java:

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

Aqui está o código java (estou executando isso no 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);
        }
    }
}

Aqui está o comando javac:

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

Como faço para compilar este programa?

user513164
fonte

Respostas:

132

Você precisa pelo menos adicionar a .javaextensão ao nome do arquivo nesta linha:

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

Do faq oficial :

Nomes de classes, 'HelloWorldApp', só são aceitos se o processamento de anotação for explicitamente solicitado

Se você receber esse erro, é porque esqueceu de incluir o sufixo .java ao compilar o programa. Lembre-se de que o comando é javac HelloWorldApp.java e não javac HelloWorldApp.

Além disso, em seu segundo exemplo javac (no qual você realmente incluiu .java), você precisa incluir todos os arquivos .jar necessários para a compilação.

aioobe
fonte
1
isso também, mas ainda não teria gerado aquele erro específico, eu acho. Deveria ter gerado um "arquivo não encontrado" ou algo parecido.
jwenting
Eu concordaria. Especialmente porque é um erro fácil de fazer (uma vez que .classdeve ser omitido ao iniciar com java).
aioobe
"Nomes de classes, 'HelloWorldApp', só são aceitos se o processamento de anotação for explicitamente solicitado". Que maneira estúpida de dizer arquivo não encontrado. Ou a que se refere a mensagem de erro? Só consigo encontrar essa correção, mas não por que a mensagem de erro foi redigida dessa forma.
masterxilo
1
Com o processamento de anotação habilitado, você pode gerar classes programaticamente durante a compilação. Portanto, com o processamento de anotações, você poderia de fato compilar algo, mesmo que o arquivo não exista (ou seja, você cria as partes ausentes na hora). É verdade que a mensagem de erro é enganosa. Eu entrarei em contato com você se analisar melhor.
aioobe
19

Fiquei perplexo com isso também porque estava incluindo a extensão .Java ... então notei a capital J.

Isso também causará o erro de "processamento de anotação":

javac myclass.Java 

Em vez disso, deveria ser:

javac myclass.java 
Tom Warfield
fonte
6

Usando javac ClassName.java para compilar o programa, então use java ClassName para executar o código compilado. Você não pode misturar javac apenas com o ClassName (sem a extensão java).

Yong Yuan
fonte
5

O erro "Nomes de classes são aceitos apenas se o processamento de anotação for explicitamente solicitado" pode ser causado por um ou mais dos seguintes itens:

  1. Não usando a extensão .java para seu arquivo java durante a compilação.
  2. Capitalização inadequada da extensão .java (ou seja, .Java) durante a compilação.
  3. Qualquer outro erro de digitação na extensão .java durante a compilação.
  4. Ao compilar e executar ao mesmo tempo, esqueça de usar '&&' para concatenar os dois comandos (ou seja, javac Hangman.java java Hangman). Levei cerca de 30 minutos para descobrir isso, o que percebi ao executar a compilação e executar o programa separadamente, o que, claro, funcionou perfeitamente.

Esta pode não ser a lista completa das causas desse erro, mas são as causas das quais estou ciente até agora.

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

Portanto, se você por engano, após compilar novamente, use javacpara executar um programa.

Chandan
fonte
3

Aprendi que você também pode obter esse erro armazenando o arquivo de origem em uma pasta chamada Java

David Miller
fonte
2

Acho que isso também se deve à compilação incorreta.

então para Linux (ubuntu) .....

arquivo javac.java

arquivo java

Amol Jagdale
fonte
3
As respostas devem tentar explicar melhor por que o problema está sendo causado e, em seguida, apontar a solução (se houver uma disponível)
Coder
1

Como você pode reproduzir esse erro críptico no terminal do Ubuntu:

Coloque isso em um arquivo chamado Main.java:

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

Em seguida, compile-o assim:

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

É porque você não especificou .javano final de Main.

Faça assim e funcionará:

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

Dê um tapa na testa agora e resmungue que a mensagem de erro é tão enigmática.

Eric Leschinski
fonte
2
você também não: D! você escreveu Main sem .java em ambos os exemplos!
freerunner de
1

Talvez você esteja compilando com o nome do arquivo em vez do nome do método ... Verifique uma vez que eu também cometi o mesmo erro, mas corrigi-lo rapidamente ... # happy Coding

Sai Saran
fonte
0

primeiro baixe o jdk em https://www.oracle.com/technetwork/java/javase/downloads/index.html . Em seguida, na pesquisa, escreva Editar as variáveis ​​de ambiente do sistema. Na janela aberta, empurro a parte inferior chamada Variáveis ​​de ambiente. Em seguida, em Variáveis ​​do sistema, insira a descrição da imagem aqui. Pressione a parte inferior new No campo novas variáveis ​​escreva "Caminho" No campo novo valor Escreva o diretório na pasta bin em jdk como " C: \ Arquivos de programas \ Java \ jdk1.8.0_191 \ bin "mas no meu sistema operacional só trabalho" C: \ Arquivos de programas \ Java \ jdk1.8.0_191 \ bin \ javac.exe " insira a descrição da imagem aqui pressione ok 3 vezes

Inicie o Cmd. Empurro as janelas inferiores + R. Em seguida, escrevo cmd. Em cmd escreva "cd (seu diretório com código)" é semelhante a C: \ Users \ user \ IdeaProjects \ app \ src. Em seguida, escreva "javac (nome de sua classe principal para seu programa) .java" semelhante a blabla.java e javac crie código de bytes como (nome de sua classe principal) .class em seu diretório. última escrita em cmd "java (nome da sua classe principal)" e meu programa começa a funcionar

Sr. Tintin
fonte
0

Erro: o nome da classe só é aceito se o processamento da anotação for explicitamente solicitado

Para evitar esse erro, você deve usar o comando javac com extensão .java.

Javac DescendingOrder.java <- funciona perfeitamente.

Avnish
fonte
0

Se você compilar vários arquivos na mesma linha, certifique-se de usar javac apenas uma vez e não para cada arquivo de classe.

Incorreta: insira a descrição da imagem aqui

Corrigir: insira a descrição da imagem aqui

Kiran
fonte