Erreur Java « ClassNotFoundException »
-
11-12-2019 - |
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();
}
}
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