문제

저는 Java 프로그래밍이 처음인데 매우 악의적인 오류 "ClassNotFoundException" 오류가 발생합니다.

이상한 점은 컴파일이 잘 된다는 것입니다.

java -cp /usr/share/java/scribe-1.3.0.jar FacebookProg

하지만 실행하려고 하면 다음과 같은 오류가 발생합니다.

steve@steve-ThinkPad-T61:~/facebook$ java  FacebookProg  
Exception in thread "main" java.lang.NoClassDefFoundError:
org/scribe/builder/ServiceBuilder  
    at FacebookProg.main(FacebookProg.java:8)  
Caused by: java.lang.ClassNotFoundException: org.scribe.builder.ServiceBuilder  
    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)  
    ... 1 more  

온라인으로 확인해 보니 Java가 컴파일 타임에 찾을 수 있었던 라이브러리를 런타임에 찾을 수 없는 것 같습니다.따라서 다음 변형을 시도했습니다.

java -cp /usr/share/java/scribe-1.3.0.jar FacebookProg  
java -cp /usr/share/java/ FacebookProg  
export CLASSPATH="/usr/share/java"; java FacebookProf  
export CLASSPATH="/usr/share/java/usr/share/java/scribe-1.3.0.jar"; java FacebookProg  

StackOverflow와 Google에서 여러 곳을 확인했지만 여전히 이유를 알 수 없습니다.저는 Java를 처음 사용하기 때문에 간단한 해결책이 있을 수 있지만 찾을 수 없습니다.Ubuntu 11.04에서 Sun Java 1.6 64비트를 사용하고 있습니다.scribe-1.3.0.jar 파일은 "/usr/share/java"에 있으며, 내 생각에는 이 곳이 Java 패키지를 넣는 표준적인 장소입니다.

베어본 코드는 여기에 있습니다(중요한 경우).

import org.scribe.builder.*;
import org.scribe.builder.api.*;
import org.scribe.oauth.*;

public class FacebookProg {
    public static void main (String args[]) {
        OAuthService service = new ServiceBuilder()
        .provider(FacebookApi.class)
        .apiKey("blah_blah")
        .apiSecret("blah_blah")
        .build();
    }
}
도움이 되었습니까?

해결책

CLASSPATH는 사용중인 외부 라이브러리의 디렉토리와 실행하려는 클래스를 가리켜 야합니다.이것을 시도하십시오 :

Windows :

java -cp .;/usr/share/java/scribe-1.3.0.jar FacebookProg
.

Linux :

java -cp .:/usr/share/java/scribe-1.3.0.jar FacebookProg
.

그런데 컴파일하기 위해 다음을 실행해야합니다.

javac -cp /usr/share/java/scribe-1.3.0.jar FacebookProg
.

다른 팁

프로그램의 디렉토리가 이라고 가정합니다.

$ home

$ home / lib / *. jar

다음과 같은 스크립트를 작성할 수 있습니다.

for file in "$HOME/lib/*.jar"
    do
        if [ -f $file ]
        then 
            CLASSPATH=$CLASSPATH:$file
        else
            echo ignore $file
        fi
done

java  -cp $CLASSPATH FacebookProg
.

java -cp /usr/share/java/scribe-1.3.0.jar FacebookProg
.

동일한 디렉토리에서 facebookprog.class를 컴파일하면이 기능이 잘 작동해야합니다.java -cp /usr/share/java/scribe-1.3.0.jar:/locationOfFacebookProg.class directory/ FacebookProg 를 시도 할 수 있습니다

이것

java -cp /usr/share/java/scribe-1.3.0.jar FacebookProg 

당신이 실행하고 있음을 의미 FacebookProg 클래스, 컴파일하지 않음.

당신이 떠나면 -cp ... out, 중요한 클래스 경로를 벗어나므로 JVM이 클래스를 찾을 수 없습니다. FacebookProg 필요합니다.

컴파일하려면 다음이 필요합니다.

javac -cp /usr/share/java/scribe-1.3.0.jar FacebookProg.java 

(참고 javac, 대신에 java 컴파일러를 호출하기 위해)

달리는 방법은 이미 알고 있습니다.

또한 다음 줄에 오류가 있습니다.

export CLASSPATH="/usr/share/java"; java FacebookProf     
export CLASSPATH="/usr/share/java/usr/share/java/scribe-1.3.0.jar"; java FacebookProg

첫 번째 철자 오류 FacebookProg 클래스 경로에 필요한 jar가 없으면 두 번째는 jar에 대한 잘못된 경로를 갖습니다.노력하다

export CLASSPATH="/usr/share/java/scribe-1.3.0.jar"; java FacebookProg     

또한 항아리가 실제로 다음 위치에 있는지 확인하십시오. /usr/share/java/scribe-1.3.0.jar

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top