[java] ClassNotFoundException을 어떻게 해결합니까?

Java 응용 프로그램을 실행하려고하는데이 오류가 발생합니다.

java.lang.ClassNotFoundException:

콜론 뒤에는 누락 된 클래스의 위치가 표시됩니다. 그러나 클래스가 다른 곳에 있기 때문에 그 위치가 존재하지 않는다는 것을 알고 있습니다. 해당 클래스의 경로를 어떻게 업데이트 할 수 있습니까? 클래스 경로와 관련이 있습니까?



답변

클래스 경로가 손상되었습니다 ( Java 세계에서 매우 일반적인 문제).

응용 프로그램을 시작하는 방법에 따라 -cp, MANIFEST.MF의 클래스 경로 항목 또는 디스크 레이아웃에 대한 인수를 수정해야 합니다.


답변

클래스 경로는 클래스를로드 할 위치 목록입니다.

이러한 ‘위치’는 디렉토리 또는 jar 파일 일 수 있습니다.

디렉토리의 경우 JVM은 클래스로드에 대해 예상되는 패턴을 따릅니다. 나는 디렉토리가있는 경우 / myproject라는 / 클래스 : C를 내 클래스 경로에, 나는 클래스로드하려고 com.mycompany.Foo를 그것이라는 디렉토리의 클래스 디렉토리 아래에 보이는 것, co.kr에서 그라는 디렉토리 아래 mycompany 하고, 마지막으로 해당 디렉토리에서 Foo.class 라는 파일을 찾습니다 .

두 번째 인스턴스에서는 jar 파일의 경우 해당 클래스에 대한 jar 파일을 검색합니다. jar 파일은 실제로 위와 같이 압축 된 디렉토리 모음입니다. jar 파일의 압축을 풀면 위의 패턴에 따라 많은 디렉토리와 클래스 파일이 생성됩니다.

따라서 JVM은 클래스 정의를로드하려고 할 때 클래스 정의를 찾기 위해 처음부터 끝까지 클래스 경로를 탐색합니다. 예를 들어, 클래스 경로에서 :

C : / myproject / classes; C : /myproject/lib/stuff.jar; C : /myproject/lib/otherstuff.jar

JVM은 먼저 디렉토리 클래스 를 찾은 다음 stuff.jar 에서 마지막으로 otherstuff.jar 에서 검색을 시도합니다 .

ClassNotFoundException이 발생하면 JVM이 전체 클래스 경로를 통과했지만 참조하려는 클래스를 찾지 못했음을 의미합니다. Java 세계에서 자주 사용되는 솔루션은 클래스 경로를 확인하는 것입니다.

java -cp 를 말한 다음 클래스 경로를 말하여 명령 줄에서 클래스 경로를 정의합니다 . Eclipse와 같은 IDE에는 클래스 경로를 지정하는 메뉴 옵션이 있습니다.


답변

이것은 내가 지금까지 찾은 최고의 솔루션 입니다.

org.mypackage클래스를 포함하는 라는 패키지가 있다고 가정 합니다.

  • HelloWorld (메인 클래스)
  • SupportClass
  • UtilClass

이 패키지를 정의하는 파일은 물리적으로 디렉터리 D:\myprogram(Windows) 또는 /home/user/myprogram(Linux)에 저장됩니다.

파일 구조는 다음과 같습니다.
여기에 이미지 설명 입력

Java를 호출 할 때 실행할 애플리케이션의 이름을 지정합니다 org.mypackage.HelloWorld.. 그러나 패키지를 정의하는 파일과 디렉토리를 찾을 위치도 Java에 알려야합니다. 따라서 프로그램을 시작하려면 다음 명령을 사용해야합니다.
여기에 이미지 설명 입력

참고 :java 현재 위치에 관계없이 위의 명령 을 실행 해야합니다. 그러나 이것은 javac. 컴파일을 위해 .java파일 이있는 디렉토리로 직접 이동하여 javac ClassName.java.


답변

클래스의 경로 또는 클래스를 포함하는 jar를 알고 있으면 실행하는 동안 클래스 경로에 추가하십시오. 여기에 언급 된대로 클래스 경로를 사용할 수 있습니다.

Windows에서

java -classpath .;yourjar.jar YourMainClass

UNIX / Linux에서

java -classpath .:yourjar.jar YourMainClass


답변

maven을 사용한다면 이것을 시도하십시오. 내 프로젝트에 maven을 사용 mvn clean install하고 프로그램을 실행하려고하면 예외가 발생합니다. 그래서 프로젝트를 정리하고 다시 실행하면 저에게 효과적입니다.

이클립스 IDE를 사용합니다.

Junit 테스트를 실행할 때 클래스를 찾을 수 없음 예외의 경우 mvn clean test한 번 실행 해보십시오 . 모든 테스트 클래스를 컴파일합니다.


답변

명령 줄을 통해 클래스 경로에 클래스 위치를 추가하려면 -cp또는 -classpath실행하는 동안 클래스 위치를 추가하기 만하면 됩니다. IE

java -cp "c:/location/of/file" YourProgram

또는 Eclipse와 같은 IDE를 실행하는 경우를 마우스 오른쪽 버튼으로 클릭하고 project -> build path -> configure build path
클래스가 포함 된 외부 JAR을 빌드 경로에 추가하면 제대로 작동합니다.


답변

사용하다 ‘;’ 구분자로. 환경 변수가 올바르게 설정된 경우 설정이 표시되어야합니다. PATH 및 CLASSPATH가 올 바르면 창에서 해당 명령을 인식해야합니다. Java를 설치할 때 컴퓨터를 다시 시작할 필요가 없습니다.