java "ClassNotFoundException" error
-
11-12-2019 - |
Pregunta
Soy nuevo en programación java y estoy consiguiendo el tan denostado-error "ClassNotFoundException de error".
Lo extraño es que compila bien:
java -cp /usr/share/java/scribe-1.3.0.jar FacebookProg
Pero cuando intento ejecutarlo, me sale el siguiente error:
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
Lo busqué por internet y parece que java no se puede encontrar la biblioteca en tiempo de ejecución que fue capaz de encontrar en tiempo de compilación.Así que trató de las siguientes variaciones:
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
He comprobado varios lugares en StackOverflow y google, y todavía no puede averiguar por qué.Soy nuevo en java, por lo que probablemente hay una solución simple, pero no puedo encontrarlo.Yo estoy usando el de Sun Java 1.6 de 64 bits en Ubuntu 11.04.El scribe-1.3.0.jar el archivo está en "/usr/share/java" que, creo, es la canónica lugar para poner los paquetes de java.
El barebone código está aquí (en el caso de que lo que importa):
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();
}
}
Solución
La Classpath tiene que señalar tanto el directorio de la biblioteca externa que está utilizando y la clase que está tratando de ejecutarse.Prueba esto:
Windows:
java -cp .;/usr/share/java/scribe-1.3.0.jar FacebookProg
Linux:
java -cp .:/usr/share/java/scribe-1.3.0.jar FacebookProg
Por cierto, para compilarlo, debería haber ejecutado esto:
javac -cp /usr/share/java/scribe-1.3.0.jar FacebookProg
Otros consejos
Supongamos que, el directorio de su programa es
$ home
$ home / lib / *. jar
Puedes escribir un guión como:
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
Esto debería funcionar bien si compilió la broche de Facebook.class en el mismo directorio.Puede intentarlo java -cp /usr/share/java/scribe-1.3.0.jar:/locationOfFacebookProg.class directory/ FacebookProg
Este
java -cp /usr/share/java/scribe-1.3.0.jar FacebookProg
significa que usted está ejecutando la FacebookProg
la clase, no compilarlo.
Si se deja la -cp ...
fuera, se deja la vital ruta de clases, de modo que la JVM no puede encontrar las clases FacebookProg
requiere.
Para compilar, usted necesita
javac -cp /usr/share/java/scribe-1.3.0.jar FacebookProg.java
(nota de la javac
, en lugar de java
para invocar el compilador)
Para que se ejecute, ya sabes cómo.
También, se tienen errores en las siguientes líneas:
export CLASSPATH="/usr/share/java"; java FacebookProf
export CLASSPATH="/usr/share/java/usr/share/java/scribe-1.3.0.jar"; java FacebookProg
La primera errores FacebookProg
y no tiene el necesario jar al classpath, la segunda tiene el camino equivocado a la jarra.Trate de
export CLASSPATH="/usr/share/java/scribe-1.3.0.jar"; java FacebookProg
También, asegúrese de que el frasco está hecho ubicados en /usr/share/java/scribe-1.3.0.jar