Ошибка Java «ClassNotFoundException»
-
11-12-2019 - |
Вопрос
Я новичок в программировании на 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