Domanda

Sono nuovo alla programmazione Java e ricevo l'errore "CLASSNOTFOUNDEXCETOND" Errore molto malignato.

La cosa strana è che si compensa bene:

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

Ma quando provo a eseguirlo, ottengo il seguente errore:

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  
.

Ho controllato online e sembra che Java non riesca a trovare la Biblioteca in fase di runtime che è stato in grado di trovare a tempo di compilazione.Quindi ho provato le seguenti varianti:

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  
.

Ho controllato diversi luoghi su Stackoverflow e Google e non riescono a capire il perché.Sono nuovo a Java, quindi probabilmente c'è una soluzione semplice, ma non riesco a trovarlo.Sto usando Sun Java 1.6 64 bit su Ubuntu 11.04.Il file Scribe-1.3.0.jar è in "/ usr / share / java" che, credo, è il posto canonico per mettere i pacchetti Java.

Il codice Barebones è qui (nel caso in cui è importante):

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();
    }
}
.

È stato utile?

Soluzione

Il classpath deve puntare sia alla directory della libreria esterna che stai utilizzando e la classe che stai cercando di eseguire se stesso.Prova questo:

Windows:

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

Linux:

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

A proposito, per compilarlo, dovresti averlo eseguito:

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

Altri suggerimenti

Supponiamo che, la directory del tuo programma è

$ home

$ home / lib / *. JAR

È possibile scrivere uno script come:

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
.

Questo dovrebbe funzionare bene se hai compilato FacebookProg.class nella stessa directory.Puoi provare java -cp /usr/share/java/scribe-1.3.0.jar:/locationOfFacebookProg.class directory/ FacebookProg

Questo

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

significa che stai eseguendo la classe FacebookProg, non la compilando.

Se si lascia il -cp ..., si sta lasciando fuori il percorso di classe VITAL, quindi il JVM non riesce a trovare le classi che FacebookProg richiede.

Per compilare, è necessario

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

(Nota il javac, anziché java per richiamare il compilatore)

Per correre, sai già come.

Inoltre, hai errori nelle linee follwoing:

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

Il primo Misspells FacebookProg e non ha il barattolo richiesto sul classpath, il secondo ha il percorso sbagliato per il barattolo.Prova

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

Inoltre, assicurati che il barattolo sia effettivamente situato in /usr/share/java/scribe-1.3.0.jar

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top