2012-03-12 2 views
0

내가 컴파일 한 나는 이제 즉, 디렉토리 내에서 다음 명령을 사용하여 OSX와 Fendora의 터미널에서 this 프로그램을 실행하려고 : 나는 다음과 같은 얻을자바 클래스 패스 문제

그러나

java ie.moguntia.webcrawler.Psucker http://www.wikipedia.org test

오류 :

Exception in thread "main" java.lang.NoClassDefFoundError: ie/moguntia/webcrawler/Psucker 
Caused by: java.lang.ClassNotFoundException: ie.moguntia.webcrawler.Psucker 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 

이전에 명령 줄에서 패키지를 사용한 응용 프로그램을 실행하지 않았으므로 오류를 알아낼 수 없습니다.

현재 디렉토리가 클래스 경로에 추가되도록 export CLASSPATH=.을 사용하여 클래스 경로를 설정하려고 시도했습니다. 다음과 같이

디렉토리 구조는 다음과 같습니다

ie/moguntia/webcrawler/

+0

CWD에 필요한 병이 있습니까? – Nishant

+0

jar 파일이 필요 없습니다. 나는 이것이 Windows에서 잘 돌아가는 것에주의해야한다. – Ash

답변

2

컴파일 된 클래스의 위치에 따라 java 명령에이 위치를 포함해야합니다. 압축 해제

java -cp . ie.moguntia.webcrawler.PSucker http://www.wikipedia.org test 

또는 여기에 단지

java ie.moguntia.webcrawler.PSucker http://www.wikipedia.org test 

내가이 실행할 수 있었던 방법 (: 또는 현재 디렉토리에있는 경우

java -cp classes ie.moguntia.webcrawler.PSucker http://www.wikipedia.org test 

: 그들은 classes 디렉토리에있는 경우 , 디렉토리에 cd, 컴파일, 클래스 찾기, 실행) :

(13:55:52) ~/Desktop/temp → ll 
total 32 
[email protected] 1 Nils.Winkler staff 14K 12 Mär 13:41 multiweb.zip 

(13:56:01) ~/Desktop/temp → unzip multiweb.zip -d multiweb 
Archive: multiweb.zip 
    creating: multiweb/CVS/ 
    creating: multiweb/ie/ 
    creating: multiweb/ie/CVS/ 
    creating: multiweb/ie/moguntia/ 
    creating: multiweb/ie/moguntia/CVS/ 
    creating: multiweb/ie/moguntia/threads/ 
    creating: multiweb/ie/moguntia/threads/CVS/ 
    inflating: multiweb/ie/moguntia/threads/ControllableThread.java 
    inflating: multiweb/ie/moguntia/threads/MessageReceiver.java 
    inflating: multiweb/ie/moguntia/threads/ObjectQueue.java 
    inflating: multiweb/ie/moguntia/threads/Queue.java 
    inflating: multiweb/ie/moguntia/threads/ThreadController.java 
    creating: multiweb/ie/moguntia/webcrawler/ 
    creating: multiweb/ie/moguntia/webcrawler/CVS/ 
    inflating: multiweb/ie/moguntia/webcrawler/PSucker.java 
    inflating: multiweb/ie/moguntia/webcrawler/PSuckerThread.java 
    inflating: multiweb/ie/moguntia/webcrawler/SaveURL.java 
    inflating: multiweb/ie/moguntia/webcrawler/URLQueue.java 
    inflating: multiweb/ie/moguntia/webcrawler/WSDLCrawler.java 
    inflating: multiweb/ie/moguntia/webcrawler/WSDLCrawlerThread.java 

(13:56:08) ~/Desktop/temp → cd multiweb 

(13:56:57) ~/Desktop/temp/multiweb → javac ie/moguntia/webcrawler/*.java 
Note: Some input files use unchecked or unsafe operations. 
Note: Recompile with -Xlint:unchecked for details. 

(13:57:11) ~/Desktop/temp/multiweb → find . -name *.class 
./ie/moguntia/threads/ControllableThread.class 
./ie/moguntia/threads/MessageReceiver.class 
./ie/moguntia/threads/Queue.class 
./ie/moguntia/threads/ThreadController.class 
./ie/moguntia/webcrawler/PSucker.class 
./ie/moguntia/webcrawler/PSuckerThread.class 
./ie/moguntia/webcrawler/SaveURL.class 
./ie/moguntia/webcrawler/URLQueue.class 
./ie/moguntia/webcrawler/WSDLCrawler.class 
./ie/moguntia/webcrawler/WSDLCrawlerThread.class 

(13:57:18) ~/Desktop/temp/multiweb → java ie.moguntia.webcrawler.PSucker http://www.wikipedia.org test 
[0] http://www.wikipedia.org 
+0

질문에 디렉토리 구조를 추가했습니다. – Ash

+0

클래스 이름을 확인하십시오. 대문자 S가있는'PSucker'입니다. 예제를 변경했습니다. – nwinkler

+0

죄송합니다. 오타였습니다. 터미널에서 PSucker를 실행했습니다. – Ash

1

당신이 외부 IE의 디렉토리에서 실행할 경우 작동합니다.

CLASSPATH 환경 변수를 사용하는 것은 일반적으로 권장되지 않습니다. 대신 -cp 스위치를 사용하여 hte 명령 줄에 클래스 경로를 명시 적으로 지정하십시오.

+0

'ie' 위의 디렉토리에서 실행 해 보았습니다. – Ash

+1

@Ash : 글쎄, 내면에서 결코 깨지지 않을거야. 그러나 수정이 도움이되지 않는다면 파일 액세스 권한 문제 일 수 있습니다. –