Pergunta

Sou novo em programação Java e estou recebendo o erro muito difamado "ClassNotFoundException".

O estranho é que ele compila bem:

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

Mas quando tento executá-lo, recebo o seguinte erro:

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  

Verifiquei on-line e parece que o Java não consegue encontrar a biblioteca em tempo de execução que conseguiu encontrar em tempo de compilação.Então tentei as seguintes variações:

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  

Verifiquei vários lugares no StackOverflow e no Google e ainda não consigo descobrir o porquê.Sou novo em Java, então provavelmente existe uma solução simples, mas não consigo encontrá-la.Estou usando Sun Java 1.6 de 64 bits no Ubuntu 11.04.O arquivo scribe-1.3.0.jar está em "/usr/share/java" que, acredito, é o local canônico para colocar pacotes java.

O código básico está aqui (caso seja 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();
    }
}
Foi útil?

Solução

O caminho de classe deve apontar para o diretório da biblioteca externa que você está usando E para a classe que você está tentando executar.Experimente isto:

Janelas:

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

Linux:

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

A propósito, para compilá-lo você deveria ter executado isto:

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

Outras dicas

suponha que o diretório do seu programa seja

$HOME

$HOME/lib/*.jar

você pode escrever um script 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

Isso deve funcionar bem se você compilou FacebookProg.class no mesmo diretório.Podes tentar java -cp /usr/share/java/scribe-1.3.0.jar:/locationOfFacebookProg.class directory/ FacebookProg

Esse

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

significa que você está executando o FacebookProg classe, não compilando-a.

Se você deixar o -cp ... fora, você está deixando o caminho de classe vital de fora, então a JVM não consegue encontrar as classes FacebookProg requer.

Para compilar você precisa

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

(Note o javac, em vez de java para invocar o compilador)

Para correr, você já sabe.

Além disso, você tem erros nas seguintes linhas:

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

Os primeiros erros ortográficos FacebookProg e não possui o jar necessário no caminho de classe, o segundo possui o caminho errado para o jar.Tentar

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

Além disso, certifique-se de que o frasco esteja realmente localizado em /usr/share/java/scribe-1.3.0.jar

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top