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
-classpath
CLASSPATH
CLASSPATH=/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
'Nice programing' 카테고리의 다른 글
Scala : Seq를 var-args 함수에 전달 (0) | 2020.11.27 |
---|---|
목록을 문자열로 변환 (0) | 2020.11.27 |
다중 선택에서 값 게시 (0) | 2020.11.27 |
CSS 애니메이션 및 디스플레이 없음 (0) | 2020.11.27 |
Ansible-로컬 환경 변수에 액세스 (0) | 2020.11.27 |