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();
    }
}
¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top