Отримання java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory Виняток


188

я виконую просту програму введення залежностей навесні і отримую цей виняток. Я вже включив файл загального журналу1.1.1.jar та spring.jar. Не могли б ви допомогти?

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
    at org.springframework.context.support.AbstractApplicationContext.<init>(AbstractApplicationContext.java:119)
    at org.springframework.context.support.AbstractXmlApplicationContext.<init>(AbstractXmlApplicationContext.java:55)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:77)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:65)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:56)
    at com.client.StoryReader.main(StoryReader.java:15)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClassInternal(Unknown Source)
    ... 6 more

2
По-перше, двічі перевірте, чи ваш класний шлях справді правильний. По-друге, спробуйте відкрити банку і перевірте, чи вона насправді містить клас org.apache.commons.logging.LogFactory. Нарешті, спробуйте налагодити, встановивши точку перерви в навантажувачі класів.
Kolibri

2
Усі відповіді, наведені нижче, commons-logging- це крок назад. Використовуйте jcl-over-slf4jзамість цього.
опіят

В Android додайте testCompile 'commons-logging: commons-logging: 1.1.1' в app.gradle
Roger Garzon Nieto

Відповіді:


118

Я також стикався з тими ж проблемами, щоб виправити, завантажити файли jar із нижньої URL-адреси

http://commons.apache.org/logging/download_logging.cgi

і скопіюйте в папку lib, це вирішить вашу проблему.


2
це не працює для мене, навіть після додавання вищезазначених баночок на класний шлях
Дін Джон

2
Ні для мене. Ці мочки зламані. Це так роздратовано.
Wesos de Queso

114

Якщо ви використовуєте maven для управління залежностями, додайте наступний рядок у свій pom.xml:

<dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.1.1</version>
</dependency>


19

commons-logging-1.1.1.jar або jcl-over-slf4j-1.7.6.jar al

Якщо ви використовуєте maven, використовуйте наведений нижче код.

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jcl-over-slf4j</artifactId>
    <version>${slf4j.version}</version>
</dependency>

2
Включення "jcl-over-slf4j" було єдиним рішенням, яке працює для мене. Я вже мав загальний доступ до своїх залежностей.
Italo Borssatto

Я використовую весняний завантажувач версії 2.0.1.РЕЛІЗАЦІЯ з maven. Це було єдине рішення, яке працювало і для мене.
Карлос Нант,

18

У мене була така ж проблема, і я вирішив її, просто додавши commons-logging.jarшлях до класу.


8

Додавання commons-logging.jar або commons-logging-1.1.jar вирішить це ...


6

Я вже включив загальний-журнал1.1.1.jar і ...

Ви впевнені, що ви точно написали ім'я файлу JAR? Я думаю, це, мабуть, має бути commons-logging-1.1.1.jar(відзначте зайве -у назві). Також перевірте, чи правильно вказано ім'я каталогу.

NoClassDefFoundError завжди означає, що клас неможливо знайти, тому, швидше за все, шлях вашого класу невірний.


2
NoClassDefFoundErrorтакож можуть бути спричинені іншими кутовими випадками, наприклад, коли ініціалізатори класів виходять з ладу за незрозумілих обставин.
skaffman

Крім того, якщо він отримує NoClassDefFoundError через те, що екземпляр класу виявився невдалим, він мав би спочатку отримати виняток ExceptionInInitializerError (якщо, звичайно, це було мовчки).
Колібрі

І не забудьте "s"commons-logging-1.1.1.jar
Глен Лоуренс

@GlennLawrence Спасибі, виправили ім’я.
Джеспер

6

Визначення обсягу для компіляції зробив це для мене

<dependency>
  <groupId>commons-logging</groupId>
  <artifactId>commons-logging</artifactId>
  <version>1.2</version>
  <scope>compile</scope>
</dependency>

1
Вирішив мою ситуацію. Під час запуску тестових випадків Mockito я отримав цю помилку і вирішив цю залежність у pom.xml.
венегопаль

4

Спробуйте виконати повне очищення від каталогу цілі / розгортання програми, щоб позбутися від будь-яких застарілих банок бібліотеки. Складіть нову збірку та перевірте, чи дійсно commons-logging.jar розміщений у правильній папці lib. Він може бути не включений під час створення бібліотеки для програми.


4

Питання вирішено додаванням commons-logging.jar

Imp файли є,

antlr-runtime-3.0.1

org.springframework.aop-3.1.0.M2

org.springframework.asm-3.1.0.M2

org.springframework.aspects-3.1.0.M2

org.springframework.beans-3.1.0.M2

org.springframework.context.support-3.1.0.M2

org.springframework.context-3.1.0.M2

org.springframework.core-3.1.0.M2

org.springframework.expression-3.1.0.M2

commons-logging-1.1.1

3

Два варіанти (принаймні):

  1. Додайте банку до журналу загального користування у свій файл, скопіювавши його у локальну папку.

Примітка: підключення банку може призвести до проблем із сервером, і, можливо, причина, чому вона додається до шляху збірки, але не вирішує проблеми запуску сервера.

Тому не вказуйте банку на зовнішню папку.

АБО ...

  1. Якщо ви дійсно не хочете додавати його локально, оскільки ви ділитеся між проектами, тоді ...

Якщо ви використовуєте екземпляр сервера tc, тоді вам потрібно додати jar як зовнішній jar до конфігурацій запуску серверного екземпляра.

перейдіть до запуску як, запустіть конфігурації ..., {ваш екземпляр сервера tc}, а потім вкладку Шлях до класу.

Потім додайте баночку, яка веде журнал спільноти.


3

У мене такі ж клопоти, що і у вас. Нарешті я перевірив версію апаша, що володіє класом. Я виявив, що версія 1.0.4 має клас.

Спробуйте використовувати версію 1.0.4 замість 1.1.X або 1.2.X

Мої залежності:

    <dependencies>
        <dependency>
            <groupId>org.jolokia</groupId>
            <artifactId>jolokia-core</artifactId>
            <version>1.3.5</version>
        </dependency>
        <dependency>
            <groupId>org.jolokia</groupId>
            <artifactId>jolokia-client-java</artifactId>
            <version>1.3.5</version>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.0.4</version>
        </dependency>
    </dependencies>

Мій код Java

J4pClient j4pClient = new J4pClient("http://localhost:8080/jolokia");
J4pReadRequest req = new J4pReadRequest("java.lang:type=Memory","HeapMemoryUsage");
req.setPath("used");
J4pReadResponse resp = j4pClient.execute(req);
System.out.println(resp.getValue());

Мій результат:

130489168

Переконайтесь також, що ваші залежності від Maven добре імпортовані.



0

Просто перевірте, чи було додано commons-logging.jar до ваших ліб та класного шляху. У мене була така ж проблема, і це було через це. dhammikas-


0

Я, як правило, призначаю класний шлях змінній, а потім перевіряю її. Я написав невеликий рубіновий скрипт, який я включаю до свого сценарію запуску, який перевіряє класний шлях перед запуском Java . Перевірка курсу дороги до запуску JVM заощадила мені багато часу на усунення подібних проблем.


2
Слід розглянути можливість використання таких інструментів, як Maven.
Неовібрант

0

Гей, я слідкував за підручником на tutorialpoint.com. Додайте після завершення Крок 2 - Встановіть Apache Common Logging API: Ви повинні імпортувати зовнішні бібліотеки jar в проект із файлів, завантажених на цьому кроці. Для мене назва файлу була " commons-logging-1.1.1 ".


0

Якщо ви працюєте на Android, то зверніть увагу, що java.beansпакет, мабуть , не є повноцінним для Android. Щоб спробувати виправити це на Android, спробуйте наступне:

  1. Завантажте android-java-air-bridge.jar (наразі кнопка завантаження знаходиться внизу сторінки або пряме посилання тут )
  2. Скопіюйте завантажену банку в каталог [APPROOT] / app / libs (або зв’яжіть банку будь-яким іншим способом)
  3. Змініть import ***заяви на Air-Bridge. Наприклад, import javadz.beanutils.BeanUtilsзамістьimport org.apache.commons.beanutils.BeanUtils;
  4. Очистіть і відновіть проект

джерело 1 , джерело 2

Прошу вибачення, оскільки я розумію, що це не зовсім відповідь на питання, хоча ця SO-сторінка виникає багато під час пошуку NoClassDefFoundError: Failed resolution of: beanUtilsпомилок, викликаних андроїдом .


0

Я отримував таку ж помилку, коли баночка була присутня. Жодне рішення не працювало. Працювало - видалення банку з файлової системи (з каталогу .m2) та очищення проекту maven.


0

У мене така ж проблема в IDE затемнення, моє рішення було: Клацніть правою кнопкою миші в розділі Мій проект> Властивості

введіть тут опис зображення

Клацніть у Maven та напишіть: jar у проекті Active Maven

введіть тут опис зображення

Нарешті, застосувати та закрити


0

У моєму випадку я тестував додаток Tomcat у затемненні і отримав цю помилку. Я вирішив це, перевіривши .classpathфайл і виправив цей запис:

<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
    <attributes>
        <attribute name="maven.pomderived" value="true"/>
        <attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
    </attributes>
</classpathentry>

Атрибут org.eclipse.jst.component.dependencyвідсутній.


-1

Перевірте, чи правильно імпортуються банки. Я імпортував їх, використовуючи збірний шлях. Але він не розпізнав банку в папці WAR / lib. Пізніше я скопіював ту саму банку в папку war / lib . Зараз він прекрасно працює. Ви можете оновити / очистити свій проект.


-2

Здрастуйте, друзі, якщо ви отримуєте будь-який не клас, знайдений виняток у сплячому коді, це проблема jar файлів. Є в основному дві проблеми
1. Я маю на увазі сказати, що ваша стара працююча версія в сплячому стані може бути 3,2 нижче. Отже, якщо ви спробуйте вище 3,6, це працює чудово

2.перше перевіряє підключення до бази даних. Якщо база даних працює належним чином, вони були помилкою в ур-програмі або файлі jar.

будь ласка, перевірте ці два пріблеми, якщо це також не працює, ви спробували IDE. Я використовую netbeanside 6.9 version.here сплячий працює нормально. Ви не отримуєте помилок з класу, не виняток із фонтану.

Я сподіваюся, що цей допомагає більше




-3

Якщо все інше виходить з ладу, як це було у мене, спробуйте помістити commons-logging-xyzjar у свій каталог lib Tomcat. Це вирішило проблему! До речі, я використовую Tomcat 6.


ім'я річ? про що ти говориш?
Боб В.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.