Question

Je suis nouveau dans la programmation Java et j'obtiens l'erreur très décriée "ClassNotFoundException".

Ce qui est étrange c'est que ça compile bien :

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

Mais lorsque j'essaye de l'exécuter, j'obtiens l'erreur suivante :

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  

J'ai vérifié en ligne et il semble que Java ne puisse pas trouver la bibliothèque au moment de l'exécution qu'il a pu trouver au moment de la compilation.J'ai donc essayé les variantes suivantes :

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  

J'ai vérifié plusieurs endroits sur StackOverflow et Google et je n'arrive toujours pas à comprendre pourquoi.Je suis nouveau sur Java, il existe donc probablement une solution simple, mais je ne la trouve pas.J'utilise Sun Java 1.6 64 bits sur Ubuntu 11.04.Le fichier scribe-1.3.0.jar se trouve dans "/usr/share/java" qui, je crois, est l'endroit canonique pour placer les packages Java.

Le code barebones est ici (au cas où cela serait important) :

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();
    }
}
Était-ce utile?

La solution

La classe de classe doit indiquer à la fois le répertoire de la bibliothèque externe que vous utilisez et la classe que vous essayez de fonctionner.Essayez ceci:

Windows:

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

Linux:

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

Au fait, pour la compiler, vous devriez avoir exécuté ceci:

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

Autres conseils

Supposons que le répertoire de votre programme est

$ home

$ home / lib / *. JAR

Vous pouvez écrire un script comme:

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

Cela devrait fonctionner correctement si vous avez compilé l'application Facebook.Class dans le même répertoire.Vous pouvez essayer java -cp /usr/share/java/scribe-1.3.0.jar:/locationOfFacebookProg.class directory/ FacebookProg

Ce

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

signifie que vous exécutez le FacebookProg classe, sans la compiler.

Si vous quittez le -cp ... out, vous laissez de côté le chemin de classe vital, donc la JVM ne peut pas trouver les classes FacebookProg a besoin.

Pour compiler, il faut

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

(noter la javac, au lieu de java pour appeler le compilateur)

Pour courir, vous savez déjà comment le faire.

De plus, vous avez des erreurs dans les lignes suivantes :

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

Les premières fautes d'orthographe FacebookProg et n'a pas le pot requis sur le chemin de classe, le second a le mauvais chemin vers le pot.Essayer

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

Assurez-vous également que le pot est bien situé à /usr/share/java/scribe-1.3.0.jar

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top