주 클래스 오류를 찾거나로드 할 수 없음

1. 소개

때때로 Java 프로그램을 실행할 때 "주 클래스를 찾거나로드 할 수 없습니다"가 표시 될 수 있습니다. 그 이유는 쉽게 추측 할 수 있습니다. JVM이 주 클래스를 찾지 못해이 오류가 발생했습니다. 근데 왜 안 됐어?

이 튜토리얼에서는 메인 클래스를 찾지 못하는 가능한 이유에 대해 설명합니다. 또한 문제를 해결하는 방법도 살펴 보겠습니다.

2. 샘플 프로그램

HelloWorld 프로그램으로 시작하겠습니다 .

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello world..!!!"); } }

이제 컴파일 해 보겠습니다.

$ javac HelloWorld.java

여기서 컴파일러는 프로그램에 대한 .class 파일을 생성합니다 . 이 .class 파일은 동일한 디렉토리에 생성됩니다. 의 .class의 파일은 자바 프로그램에 주어진 클래스 이름과 동일한 이름을 갖게됩니다. .class 파일은 실행 가능합니다.

다음 섹션에서는이 .class 파일을 실행 하고 "주 클래스를 찾거나로드 할 수 없습니다"라는 오류의 가능한 원인을 이해하려고합니다.

3. 잘못된 클래스 이름

Java 컴파일러에서 생성 된 .class 파일 을 실행하려면 다음 명령을 사용할 수 있습니다.

java 

이제 프로그램을 실행 해 보겠습니다.

$ java helloworld Error: Could not find or load main class helloworld

예, "기본 클래스 helloworld를 찾거나로드 할 수 없습니다"라는 오류와 함께 실패했습니다.

앞에서 설명한 것처럼 컴파일러는 프로그램의 Java 클래스에 지정된 것과 똑같은 이름으로 .class 파일을 생성합니다 . 그래서 우리의 경우, 기본 클래스는 이름이있을 것이다 하여 HelloWorld 하지 helloworld를 .

올바른 대 / 소문자를 사용하여 한 번 더 시도해 보겠습니다.

$ java HelloWorld Hello world..!!!

이번에는 성공적으로 실행되었습니다.

3.1. 파일 확장자

Java 프로그램을 컴파일하려면 확장자 (. java ) 와 함께 파일 이름을 제공해야합니다 .

$ javac HelloWorld.java

그러나. 클래스 파일의 경우 파일 이름이 아닌 클래스 이름을 제공해야합니다. 따라서 .class 확장자 를 제공 할 필요가 없습니다 .

$ java HelloWorld.class Error: Could not find or load main class HelloWorld.class

따라서 다시 올바른 클래스 이름을 사용하여 프로그램을 실행 해 보겠습니다.

$ java HelloWorld Hello world..!!!

4. 자바 패키지 이름

Java에서 우리는 package 라고 부르는 것과 유사한 클래스를 함께 유지 합니다 .

HelloWorld 클래스를 com.baeldung 패키지 로 이동해 보겠습니다 .

package com.baeldung; public class HelloWorld { public static void main(String[] args) { System.out.println("Hello world..!!!"); } }

이제 이전과 같이 업데이트 된 HelloWorld 프로그램을 컴파일하고 실행 해 보겠습니다 .

$ java HelloWorld Error: Could not find or load main class HelloWorld

그러나 다시 "주 클래스 HelloWorld를 찾거나로드 할 수 없습니다"라는 오류가 발생합니다!

여기서 우리가 놓친 것이 무엇인지 이해하려고 노력합시다.

패키지에있는 Java 클래스를 실행하려면 완전한 이름을 제공해야합니다 . 따라서 우리의 경우 HelloWorld의 정규화 된 이름은 com.baeldung.HelloWorld 입니다.

이제 com.baeldung 패키지를 만들 때 실제로 다음과 같은 폴더 구조를 만들었습니다.

com/baeldung/HelloWorld.java

먼저 com / baeldung 디렉토리 에서 프로그램을 실행 해 보겠습니다 .

$ java com.baeldung.HelloWorld Error: Could not find or load main class com.baeldung.HelloWorld

그래도 프로그램을 실행할 수 없습니다.

여기에서 정규화 된 클래스 이름 com.baeldung.HelloWorld를 지정했을 때 Java 는 프로그램을 실행중인 디렉토리 아래의 com / baeldung 에서 HelloWorld.class 파일을 찾으려고 했습니다.

이미 com / baeldung 내부에 있었기 때문에 Java는 HelloWorld 프로그램 을 찾아서 실행하지 못했습니다 .

이제 상위 폴더로 돌아가 실행 해 보겠습니다.

$ java com.baeldung.HelloWorld Hello world..!!!

예, 우리는 다시 세상에“안녕하세요”라고 말할 수 있습니다.

5. 잘못된 클래스 경로

계속 진행하기 전에 먼저 클래스 경로가 무엇인지 이해합시다. 현재 실행중인 JVM에서 사용할 수있는 클래스 집합입니다.

classpath 변수를 사용하여 파일 시스템 에서 .class 파일 을 찾을 위치를 JVM에 알립니다 .

프로그램을 실행하는 동안 -classpath 옵션을 사용하여 클래스 경로를 제공 할 수 있습니다 . 예:

java -classpath /my_programs/compiled_classes HelloWorld

여기서 Java는 방금 이름을 만든 폴더 인 / my_programs / compiled_classes 폴더 에서 HelloWorld.class 파일을 찾습니다 . 기본적으로 classpath 변수는 현재 디렉토리를 의미하는 "."로 설정됩니다.

위 섹션에서는 프로그램을 실행하기 위해 디렉토리를 변경했습니다. 그러나 다른 폴더에서 실행하려면 어떻게해야합니까? 이때 classpath 변수가 도움이됩니다.

com / baeldung 디렉토리에서 프로그램을 실행하려면 클래스 경로가 각 패키지 부분에 대해 하나씩 두 개의 디렉토리가 있음을 간단히 나타낼 수 있습니다.

$ java -claspath ../../ com.baeldung.HelloWorld Hello world..!!!

여기서 ".."는 상위 디렉토리를 나타냅니다. 이 경우 "../../"는 패키지 계층 구조의 최상위를 나타냅니다.

6. 결론

이 자습서에서는 "기본 클래스를 찾거나로드 할 수 없습니다"라는 오류의 가능한 이유를 배웠습니다.

물론이 오류를 해결하는 방법도 배웠습니다.