인터넷의 수 많은 글들이 이 오류에 대해서, 클래스패스를 제대로 지정하지 않거나 혹은 환경 변수 등록을 


제대로 하지않아서 발생하는 문제라고 하고 있다. 그러나 환경 변수 혹은 클래스패스를 제대로 지정해도 문제가 


해결되지 않았다.


-----


이클립스를 사용하던 도중 프롬프트 상에서 직접 자바 클래스파일을 실행할 필요가 생겼다.


이클립스에서 작성한 자바 파일에 해당하는 클래스 파일은 워크스페이스폴더\프로젝트폴더\bin\패키지명\ 


안에 저장되므로, 프롬프트창에서 해당 디렉터리까지 이동한다음에 java 명령을 내려 클래스파일을 실행하려고 


했다. (참고로 나의 경우 이클립스에서 PMBS_Client_Test 라는 프로젝트를 사용하고 있었고, 그 안에서 


client라는 이름의 패키지를 만들고 그 안에 MainClient.java 파일을 만들어 코드를 작성하고 있었다.)






나는 이클립스를 사용하기 때문에 jdk와 관련된 CLASSPATH나 JAVA_HOME 같은 환경변수들을 설정하지 


않았었고, 이 때문에 직접 java 명령을 내려 클래스파일을 실행하는 경우에 문제가 생기는 것이라 생각했다.


그러나 환경 변수를 설정하거나 혹은 java 명령에 직접 -classpath나 -cp 옵션을 주어도 동일한 오류가 발


생하는 것이었다.



해결방법은 간단했다.


별도로 패키지를 만들어 사용하는 경우에, java 명령은 패키지의 parent 디렉터리 위치에서 실행하되, 실행할


클래스 파일의 이름은 패키지명.클래스파일명 이렇게 주어야 한다.





나의 경우 bin폴더 안에 client패키지가 있고 그 안에 MainClient.class 파일이 있으므로


패키지의 parent 디렉터리인 bin폴더 위치에서 java 명령을 실행하되, 실행할 클래스파일의 이름은


MainClient가 아니라 client.MainClient가 된다.




-----

16.06.23


java 명령어의 인자로 클래스 이름을 전달할 경우 패키지 이름을 포함한 full class name을 전달해야 한다고


한다. (http://stackoverflow.com/questions/18093928/what-does-could-not-find-or-load-main-class-mean)


그리고 java 프로그램에서는 인자로 들어온 (패키지 이름이 모두 포함된) full class name을 가지고 클래스


파일들을 찾기 때문에 결국 상위 디렉터리(또는 패키지의 루트 디렉터리)에서 실행을 해야 하는 듯 하다.




Posted by huammmm1
,