Nice programing

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

nicepro 2020. 11. 27. 21:24
반응형

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


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가 설치되어 있습니다.


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

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


명령 줄에서 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컴파일 된 파일이 난독 화 된 경우 작동하지 않습니다.


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

참고 URL : https://stackoverflow.com/questions/5757189/how-do-i-run-java-class-files

반응형