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. 결론
이 기사에서는 "메인 클래스를 찾거나 로드할 수 없습니다." 오류의 가능한 원인을 배웠습니다.
그런 다음 물론 이 오류를 해결하는 방법도 배웠습니다.