Java .class 파일을 어떻게 실행합니까?


81

HelloWorld 프로그램을 컴파일했으며 명령 프롬프트를 사용하여 실행하고 있습니다. .class 파일의 이름은 HelloWorld2.class입니다.

파일은 C : \ Users \ Matt \ workspace \ HelloWorld2 \ bin에 있습니다. 명령 프롬프트로 이동하여 "Java HelloWorld2"를 입력하면 다음과 같은 내용이 표시됩니다.

C:\Users\Matt>Java HelloWorld2
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld2
Caused by: java.lang.ClassNotFoundException: HelloWorld2
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: HelloWorld2.  Program will exit.

HelloWorld가 인쇄 될 것으로 예상했습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? JDK가 설치되어 있습니다.


9
문제에 대한 Isaac의 답변 외에도. 대문자는 MS Windows에서만 작동하므로 소문자로 "java"를 작성하는 것이 좋습니다.
Hendrik Brummermann 2011

답변:


95

컴파일 된 클래스를 찾으려면 클래스 경로를 설정해야합니다.

java -cp C:\Users\Matt\workspace\HelloWorld2\bin HelloWorld2


내 파일 구조의 어느 곳에서나 완벽하게 작동합니다. 컴파일 된 클래스의 경로를 -cp 매개 변수에 넣은 다음 경로없이 컴파일 된 클래스 이름을 넣으십시오. 컴파일 된 클래스와 동일한 폴더에있는 경우 -cp 매개 변수없이이 클래스를 실행할 수도 있습니다.
Václav

42

명령 줄에서 Java 클래스 파일 을 실행하기 위한 구문은 다음과 같습니다.

java -classpath /path/to/jars <packageName>.<MainClassName>

여기서 packageName (일반적으로 com또는 으로 시작 org)은 클래스 파일이있는 폴더 이름입니다.

예를 들어 기본 클래스 이름이 App이고 앱의 Java 패키지 이름com.foo.app이면 클래스 파일이 com/foo/app폴더 (각 점에 대한 별도의 폴더)에 있어야하므로 앱을 다음과 같이 실행합니다.

$ java com.foo.app.App

참고 : $는 쉘 프롬프트를 나타내며 입력시 무시하십시오.

클래스에 package이름이 정의되어 있지 않으면 다음으로 실행하십시오 java App..

다른 jar 종속성이있는 경우 / 또는 jar / war / ear / zip / class 파일 이있는 폴더를 가리키는 변수를 사용하여 classpath 매개 변수 를 지정했는지 확인하십시오 . 따라서 Linux에서는 명령에 접두사를 붙일 수 있습니다 . Windows에서는 시스템 변수에 폴더를 추가해야합니다. 설정되지 않은 경우 사용자 클래스 경로는 현재 디렉토리 ( ) 로 구성됩니다 .-cp-classpathCLASSPATHCLASSPATH=/path/to/jars.


실용적인 예

Maven 을 사용하여 샘플 프로젝트를 다음 과 같이 만들었습니다 .

$ mvn archetype:generate -DgroupId=com.foo.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false 

그리고 우리는 dir mvn compile에서 우리 의 프로젝트를 컴파일했고, 우리 my-app/의 클래스 파일이 target/classes/com/foo/app/App.class.

그것을 실행하려면 클래스 경로를 지정 -cp하거나 직접 이동할 수 있습니다. 아래 예제를 확인하십시오.

$ find . -name "*.class"
./target/classes/com/foo/app/App.class
$ CLASSPATH=target/classes/ java com.foo.app.App
Hello World!
$ java -cp target/classes com.foo.app.App
Hello World!
$ java -classpath .:/path/to/other-jars:target/classes com.foo.app.App
Hello World!
$ cd target/classes && java com.foo.app.App
Hello World!

클래스 및 패키지 이름을 다시 확인하려면 Java 클래스 파일 디스어셈블러 도구를 사용할 수 있습니다. 예 :

$ javap target/classes/com/foo/app/App.class
Compiled from "App.java"
public class com.foo.app.App {
  public com.foo.app.App();
  public static void main(java.lang.String[]);
}

참고 : javap컴파일 된 파일이 난독 화 된 경우 작동하지 않습니다.


2

이것은 많은 것을 의미 할 수 있지만 가장 일반적인 것은 파일에 포함 된 클래스가 파일 자체와 동일한 이름을 갖지 않는다는 것입니다. 따라서 클래스가 HelloWorld2라고도하는지 확인하십시오.


0
  1. 컴파일하려는 Java 파일을 저장 한 경로로 이동하십시오.
  2. cmd 를 입력하여 경로를 바꾸고 Enter를 누르십시오.
  3. 다음과 같은 경로 파일을 포함하는 명령 프롬프트 디렉토리가 나타납니다. C:/blah/blah/foldercontainJava
  4. 시작하다 javac javafile.java
  5. 엔터 키를 치시오. 자동으로 Java 클래스 파일을 생성합니다.

-3

Java를 소문자로 입력하고 .class를 추가해야합니다!

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