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 <.class filename>

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

$ 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에서 우리는 패키지 라고 부르는 유사한 클래스를 함께 유지  합니다 .

하자 이동 하여 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. 결론

이 기사에서는 "메인 클래스를 찾거나 로드할 수 없습니다." 오류의 가능한 원인을 배웠습니다.

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

Junit footer banner