Вопрос

Я новичок в программировании на Java и получаю очень злобную ошибку «ClassNotFoundException».

Странно то, что он компилируется нормально:

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

Но когда я пытаюсь запустить его, я получаю следующую ошибку:

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  

Я проверил онлайн, и кажется, что Java не может найти библиотеку во время выполнения, которую она смогла найти во время компиляции.Итак, попробовал следующие варианты:

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  

Я проверил несколько мест в StackOverflow и Google и до сих пор не могу понять, почему.Я новичок в Java, поэтому, возможно, есть простое решение, но я не могу его найти.Я использую 64-разрядную версию Sun Java 1.6 в Ubuntu 11.04.Файл scribe-1.3.0.jar находится в каталоге «/usr/share/java», который, я считаю, является каноническим местом для размещения Java-пакетов.

Код barebone-системы находится здесь (если это имеет значение):

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();
    }
}
Это было полезно?

Решение

Классический путь должен указывать как на каталог внешней библиотеки, которую вы используете, и класс, который вы пытаетесь запустить себя.Попробуйте это:

Windows:

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

linux:

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

Кстати, чтобы скомпилировать его, вы должны запустить это:

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

Другие советы

Предположим, что каталог вашей программы является

$ home

$ Home / lib / *. JAR

Вы можете написать скрипт, как:

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
.

Это должно работать нормально, если вы составляете FacebookProg.class в том же каталоге.Вы можете попробовать java -cp /usr/share/java/scribe-1.3.0.jar:/locationOfFacebookProg.class directory/ FacebookProg

Этот

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

означает, что вы используете FacebookProg класс, а не компилировать его.

Если вы оставите -cp ... out, вы оставляете жизненно важный путь к классам, поэтому JVM не может найти классы FacebookProg требует.

Для компиляции вам понадобится

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

(Обратите внимание javac, вместо java для вызова компилятора)

Бежать вы уже умеете.

Также у вас есть ошибки в следующих строках:

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

Первые ошибки в написании FacebookProg и не имеет нужного jar-файла в пути к классам, второй имеет неправильный путь к jar-файлу.Пытаться

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

Также убедитесь, что банка действительно находится по адресу /usr/share/java/scribe-1.3.0.jar

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top