javac 오류 : 주석 처리가 명시 적으로 요청 된 경우에만 클래스 이름이 허용됩니다.


113

Java 프로그램을 컴파일 할 때이 오류가 발생합니다.

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

다음은 자바 코드입니다 (우분투에서 실행 중입니다).

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

로부터 공식 자주 묻는 질문 :

클래스 이름 'HelloWorldApp'은 주석 처리가 명시 적으로 요청 된 경우에만 허용됩니다.

이 오류가 발생하면 프로그램을 컴파일 할 때 .java 접미사를 포함하지 않은 것입니다. 명령은 javac HelloWorldApp이 아니라 javac HelloWorldApp.java입니다.

또한 두 번째 javac-example (실제로 포함 .java)에는 컴파일에 필요한 모든 필수 .jar- 파일 을 포함해야합니다 .


1
그것도 그래도 여전히 내가 생각하는 특정 오류가 발생하지 않았을 것입니다. "파일을 찾을 수 없음"또는 그 라인을 따라 무언가를 산출해야합니다.
jwenting

동의합니다. 특히하기 쉬운 실수이기 때문에 (로 .class시작할 때 생략해야하기 때문에 java).
aioobe

"클래스 이름 'HelloWorldApp'은 주석 처리가 명시 적으로 요청 된 경우에만 허용됩니다." 파일을 찾을 수 없다고 말하는 어리석은 방법. 또는 참조해야하는 오류 메시지는 무엇입니까? 이 수정 사항 만 찾을 수 있지만 오류 메시지가 그런 식으로 표시된 이유는 아닙니다.
masterxilo

1
주석 처리를 활성화하면 컴파일 중에 프로그래밍 방식으로 클래스를 생성 할 수 있습니다. 따라서 주석 처리를 사용 하면 파일이 존재하지 않더라도 실제로 무언가를 컴파일 할 있습니다 (즉, 누락 된 부분을 즉석에서 생성). 물론 오류 메시지는 잘못된 것입니다. 더 자세히 살펴보면 다시 연락 드리겠습니다.
aioobe 2014 년

19

.Java 확장자를 포함하고 있었기 때문에 이것도 당황했습니다. 그리고 대문자 J를 발견했습니다.

이로 인해 "주석 처리"오류도 발생합니다.

javac myclass.Java 

대신 다음과 같아야합니다.

javac myclass.java 

6

사용 javac의의 ClassName.java을 프로그램을 컴파일하려면, 다음 사용하는 자바 클래스 이름을 컴파일 된 코드를 실행합니다. javac와 ClassName 만 함께 사용할 수 없습니다 (Java 확장없이).


5

다음 중 하나 이상으로 인해 "주석 처리가 명시 적으로 요청 된 경우에만 클래스 이름이 허용됩니다."오류가 발생할 수 있습니다.

  1. 컴파일 할 때 Java 파일에 .java 확장자를 사용하지 않습니다.
  2. 컴파일시 .java 확장자 (예 : .Java)의 대소 문자가 잘못되었습니다.
  3. 컴파일 할 때 .java 확장자의 다른 오타.
  4. 컴파일하고 동시에 실행할 때 '&&'를 사용하여 두 명령을 연결하는 것을 잊었습니다 (예 : 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

이것은 또한 잘못된 컴파일 때문이라고 생각합니다 ..

그래서 리눅스 (ubuntu) .....

javac file.java

자바 파일


3
답변은 처음에 문제가 발생하는 이유를 자세히 설명하고 해결 방법을 제시해야합니다 (사용 가능한 경우)
Coder

1

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

1

아마도 메소드 이름 대신 파일 이름으로 컴파일하고 있을지도 모릅니다 .... 나도 같은 실수를했지만 빨리 고쳤 으면 확인하세요 ..... # happy Coding


0

먼저 https://www.oracle.com/technetwork/java/javase/downloads/index.html 에서 jdk를 다운로드 하십시오 . 그런 다음 검색에서 시스템 환경 변수를 편집합니다. 열린 창에서 환경 변수라는 하단을 누릅니다. 그런 다음 시스템 변수 에 이미지 설명을 여기에 입력합니다. 하단에 새 항목을 입력합니다. 새 변수는 "경로"를 필드에 작성합니다. 새 값 ""과 같이 jdk의 폴더 bin에 디렉토리를 작성합니다. C : \ Program Files \ Java \ jdk1.8.0_191 \ bin "이지만 내 OS에서는"C : \ Program Files \ Java \ jdk1.8.0_191 \ bin \ javac.exe "만 작동합니다. 여기에 이미지 설명을 입력하고 확인을 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를 한 번만 사용해야합니다.

틀림 : 여기에 이미지 설명 입력

옳은: 여기에 이미지 설명 입력

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.