Страницы

Поиск по вопросам

пятница, 31 января 2020 г.

Почему возникает java.lang.NoClassDefFoundError?

#java


При использовании данного кода:

package javaapplication;

import com.github.sardine.DavResource;
import com.github.sardine.Sardine;
import com.github.sardine.SardineFactory;
import java.io.IOException;
import java.util.List;

public class JavaApplication {

    public static void main(String[] args) throws IOException {
        Sardine sardine = SardineFactory.begin("login", "password");
        List resources;
        resources = sardine.list("http://yourdavserver.com/adirectory/");
        for (DavResource res : resources)
        {
            System.out.println(res);
        }
    }

}


Возникает ошибка NoClassDefFoundError:


  run: Exception in thread "main" java.lang.NoClassDefFoundError:
  org/apache/http/HttpEntity    at
  com.github.sardine.SardineFactory.begin(SardineFactory.java:44)   at
  com.github.sardine.SardineFactory.begin(SardineFactory.java:34)   at
  javaapplication.JavaApplication.main(JavaApplication.java:25) Caused
  by: java.lang.ClassNotFoundException: org.apache.http.HttpEntity  at
  java.net.URLClassLoader.findClass(URLClassLoader.java:381)    at
  java.lang.ClassLoader.loadClass(ClassLoader.java:424)     at
  sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)     at
  java.lang.ClassLoader.loadClass(ClassLoader.java:357)     ... 3 more
  C:\Users\Levchenko\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53:
  Java returned: 1


Подскажите, пожалуйста, почему возникает ошибка. Возможно, я подключил не все библиотеки
которые нужны.

Добавил библиотеки. В структуре проекта теперь 3 библиотеки: sardine, httpclient,
http core. Вот что получилось:


  Exception in thread "main" java.lang.NoClassDefFoundError:
  org/apache/commons/logging/LogFactory     at
  org.apache.http.conn.ssl.AbstractVerifier.(AbstractVerifier.java:61)
    at
  org.apache.http.conn.ssl.AllowAllHostnameVerifier.(AllowAllHostnameVerifier.java:44)
    at
  org.apache.http.conn.ssl.AllowAllHostnameVerifier.(AllowAllHostnameVerifier.java:46)
    at
  org.apache.http.conn.ssl.SSLConnectionSocketFactory.(SSLConnectionSocketFactory.java:146)
    at
  com.github.sardine.impl.SardineImpl.createDefaultSecureSocketFactory(SardineImpl.java:1116)
    at
  com.github.sardine.impl.SardineImpl.createDefaultSchemeRegistry(SardineImpl.java:1099)
    at
  com.github.sardine.impl.SardineImpl.configure(SardineImpl.java:1064)
    at com.github.sardine.impl.SardineImpl.(SardineImpl.java:203)
    at com.github.sardine.SardineFactory.begin(SardineFactory.java:44)
    at com.github.sardine.SardineFactory.begin(SardineFactory.java:34)
    at javaapplication.JavaApplication.main(JavaApplication.java:25)
  Caused by: java.lang.ClassNotFoundException:
  org.apache.commons.logging.LogFactory     at
  java.net.URLClassLoader.findClass(URLClassLoader.java:381)    at
  java.lang.ClassLoader.loadClass(ClassLoader.java:424)     at
  sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)     at
  java.lang.ClassLoader.loadClass(ClassLoader.java:357)     ... 11 more
  C:\Users\Levchenko\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53:
  Java returned: 1

    


Ответы

Ответ 1



Ошибка NoClassDefFoundError возникает когда класс от которого зависит ваше приложение недоступен при исполнении кода. Описание ошибки в документации: Thrown if the Java Virtual Machine or a ClassLoader instance tries to load in the definition of a class (as part of a normal method call or as part of creating a new instance using the new expression) and no definition of the class could be found. The searched-for class definition existed when the currently executing class was compiled, but the definition can no longer be found. Вольный перевод: Выбрасывается когда виртуальная машиной Java или загрузчик классов пытается загрузить определение класса (при стандартном вызове метода либо при создании экземпляра класса с конструктора) и при этом определение класса не удалось обнаружить. Искомое определение класса существовало при компиляции текущего класса, но при исполнении не может быть найдено Скорее всего ошибка вызвана тем, что одна из библиотек, требуемых для работы вашего приложения не добавлена в classpath. Для исправления ошибки нужно: посмотреть на имя отсутствующего класса в сообщении об ошибке; проверить при обращении к какому классу возникает ошибка; найти библиотеку (зависимость, если используется система сборки Maven, Gradle), в которой находится класс; проверить что библиотека доступна при исполении кода (JAR-файл библиотеки находится в classpath). Похожий вопрос в английской версии Stackoverflow: Why am I getting a NoClassDefFoundError in Java? Ваш пример В данном случае имя класса org/apache/http/HttpEntity. Он находится в библиотеке Apache HttpComponents Core. Скачать ее можно в репозитории Maven (https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore/4.4.3). Sardine зависит от библиотеки Apache HttpComponents Client версии 4.5.1, которая в свою очередь зависит от Apache HttpComponents Core версии 4.4.3. Скорее всего Вам понадобится подключить обе эти библиотеки как минимум. Добавьте библиотеки и попробуйте запустить заново.

Комментариев нет:

Отправить комментарий