Pobieranie wyjątku java.lang.ClassNotFoundException: wyjątek org.apache.commons.logging.LogFactory

188

Realizuję prosty program wiosna wtrysku zależności i otrzymuję ten wyjątek. Dołączyłem już plik common-logging1.1.1.jar i spring.jar. Czy możesz mi pomóc?

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
skaffman
źródło
2
Po pierwsze, sprawdź dokładnie, czy twoja ścieżka klasy jest rzeczywiście poprawna. Po drugie, spróbuj otworzyć słoik i sprawdź, czy rzeczywiście zawiera on klasę org.apache.commons.logging.LogFactory. Na koniec spróbuj debugować, ustawiając punkt przerwania w module ładującym klasy.
Kolibri,
2
Wszystkie poniższe odpowiedzi sugerują commons-loggingkrok wstecz. Użyj jcl-over-slf4jzamiast tego.
opyate
W systemie Android dodaj testCompile 'commons-logging: commons-loging: 1.1.1' do app.gradle
Roger Garzon Nieto

Odpowiedzi:

118

Napotkałem również te same problemy, aby naprawić, pobrać pliki jar z poniższego adresu URL

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

i skopiuj do folderu lib, rozwiąże twój problem.

Manikandan
źródło
2
to nie działa dla mnie, nawet po dodaniu wyżej wspomnianego wspólnego słoika w classpath
Deen John
2
Ani dla mnie. Te biblioteki są zepsute. To takie frustrujące.
Wesos de Queso
114

Jeśli używasz maven do zarządzania zależnościami, dodaj następujący wiersz w pliku pom.xml:

<dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.1.1</version>
</dependency>
asuka
źródło
19

commons-loging-1.1.1.jar lub jcl-over-slf4j-1.7.6.jar al

Jeśli używasz maven, użyj poniższego kodu.

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jcl-over-slf4j</artifactId>
    <version>${slf4j.version}</version>
</dependency>
Paramesh Korrakuti
źródło
2
Dołączenie „jcl-over-slf4j” było jedynym rozwiązaniem, które działa dla mnie. Miałem już wspólne logowanie w moich zależnościach.
Italo Borssatto
Korzystam z wersji Spring-boot 2.0.1. RELEASE with maven. To było jedyne rozwiązanie, które działało również dla mnie.
Carlos Nantes,
18

Miałem ten sam problem i rozwiązałem go, dodając commons-logging.jarścieżkę klasy.

piętrowy
źródło
8

Dodanie pliku commons-logowanie.jar lub commons-logowanie-1.1.jar rozwiąże ten ...

Kumpel
źródło
6

Dołączyłem już plik common-logging1.1.1.jar i ...

Czy na pewno poprawnie wpisałeś nazwę pliku JAR? Myślę, że tak powinno być commons-logging-1.1.1.jar(zwróć uwagę na dodatkowe -w nazwie). Sprawdź także, czy nazwa katalogu jest poprawna.

NoClassDefFoundError zawsze oznacza, że ​​nie można znaleźć klasy, więc najprawdopodobniej twoja ścieżka do klasy jest nieprawidłowa.

Jesper
źródło
2
NoClassDefFoundErrormogą być również spowodowane innymi przypadkami narożnymi, na przykład, gdy inicjatory klas zawodzą w mało znanych okolicznościach.
skaffman
Ponadto, jeśli otrzyma NoClassDefFoundError, ponieważ wystąpienie klasy nie powiodło się, powinien najpierw uzyskać wyjątek ExceptionInInitializerError (chyba że oczywiście został złapany w trybie cichym).
Kolibri,
I nie zapomnij o „s”commons-logging-1.1.1.jar
Glenn Lawrence
@GlennLawrence Dzięki, naprawiłem nazwę.
Jesper,
6

Ustawienie zakresu do kompilacji zrobiło to dla mnie

<dependency>
  <groupId>commons-logging</groupId>
  <artifactId>commons-logging</artifactId>
  <version>1.2</version>
  <scope>compile</scope>
</dependency>
Patrick Brielmayer
źródło
1
Rozwiązałem moją sytuację. Podczas uruchamiania przypadków testowych Mockito dostałem ten błąd i rozwiązano tę zależność w pom.xml.
venugopal
4

Spróbuj całkowicie wyczyścić katalog docelowy / wdrażania dla aplikacji, aby pozbyć się wszelkich starych bibliotek plików. Utwórz nową wersję i sprawdź, czy plik commons-logowanie.jar faktycznie znajduje się w odpowiednim folderze lib. Może nie zostać uwzględniony podczas tworzenia biblioteki dla aplikacji.

emills
źródło
4

Problem rozwiązany przez dodanie pliku commons-logging.jar

Pliki Imp to

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
Tush
źródło
3

Dwie opcje (przynajmniej):

  1. Dodaj słoik do logowania do wspólnego pliku, kopiując go do folderu lokalnego.

Uwaga: połączenie słoika może prowadzić do problemów z serwerem i być może przyczyną, dla której dodano go do ścieżki kompilacji, ale nie rozwiązało problemu z uruchomieniem serwera.

Więc nie kieruj słoika na folder zewnętrzny.

LUB...

  1. Jeśli naprawdę nie chcesz dodawać go lokalnie, ponieważ udostępniasz słoik między projektami, to ...

Jeśli używasz instancji serwera tc, musisz dodać jar jako zewnętrzny jar do konfiguracji uruchamiania instancji serwera.

idź, aby uruchomić jako, uruchom konfiguracje ..., {instancja serwera tc}, a następnie kartę Ścieżka klasy.

Następnie dodaj słoik do logowania.

devaaron
źródło
3

Mam takie same kłopoty jak ty. W końcu sprawdziłem wersję apache posiadającą klasę. Odkryłem, że wersja 1.0.4 ma klasę.

Spróbuj użyć wersji 1.0.4 zamiast 1.1.X lub 1.2.X

Moje zależności:

    <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>

Mój kod 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());

Mój wynik:

130489168

Dokładnie sprawdź, czy twoje zależności od maven są dobrze zaimportowane.

歌 永 _
źródło
0

Tylko sprawdź, czy plik commons-logowanie.jar został dodany do twoich bibliotek i ścieżki klas. Miałem ten sam problem i to z tego powodu. dhammiki

dhammiki
źródło
0

Zazwyczaj przypisuję ścieżkę klasy do zmiennej, a następnie ją weryfikuję. Napisałem mały skrypt ruby, który włączam w skrypty startowe, które sprawdzają ścieżkę klasy przed uruchomieniem java . Sprawdzanie ścieżki klasy przed uruchomieniem JVM pozwoliło mi zaoszczędzić mnóstwo czasu na rozwiązywanie problemów tego typu.

Brianegge
źródło
2
Zamiast tego powinieneś rozważyć użycie narzędzi takich jak Maven.
Neovibrant
0

Hej, śledziłem samouczek na tutorialpoint.com. Dodaj po zakończeniu Krok 2 - Zainstaluj interfejs API Apache Common Logging: Musisz zaimportować zewnętrzne biblioteki jar do projektu z plików pobranych w tym kroku. Dla mnie nazwa pliku to „ commons-logging-1.1.1 ”.

Trzeci
źródło
0

Jeśli używasz tego na Androidzie, zauważ, że java.beanspakiet najwyraźniej nie jest kompletny na Androidzie. Aby spróbować naprawić to na Androidzie, wykonaj następujące czynności:

  1. Pobierz android-java-air-bridge.jar (obecnie przycisk pobierania znajduje się na dole strony lub bezpośredni link tutaj )
  2. Skopiuj pobrany słoik do [APPROOT] / app / libs (lub połącz słoik w inny sposób)
  3. Zmień import ***zdania na „most powietrzny”. Np. import javadz.beanutils.BeanUtilsZamiastimport org.apache.commons.beanutils.BeanUtils;
  4. Oczyść i odbuduj projekt

źródło 1 , źródło 2

Przepraszam, ponieważ zdaję sobie sprawę, że to nie jest dokładnie odpowiedź na pytanie, chociaż ta strona SO pojawia się często podczas wyszukiwania NoClassDefFoundError: Failed resolution of: beanUtilsbłędów generowanych przez Androida .

Voy
źródło
0

Otrzymywałem ten sam błąd, gdy słoik był obecny. Żadne rozwiązanie nie działało. Udało się usunąć słoik z systemu plików (z katalogu .m2), a następnie wyczyścić projekt maven.

Anmol Gupta
źródło
0

Mam ten sam problem w środowisku IDE Eclipse, moje rozwiązanie brzmiało: Kliknij prawym przyciskiem myszy Mój projekt> Właściwości

wprowadź opis zdjęcia tutaj

Kliknij w Maven i napisz: jar w projekcie Active Maven

wprowadź opis zdjęcia tutaj

Na koniec zastosuj i zamknij

Yuliem Alavez
źródło
0

W moim przypadku testowałem aplikację Tomcat w środowisku Eclipse i otrzymałem ten błąd. Rozwiązałem go, sprawdzając .classpathplik i poprawiłem ten wpis:

<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>

Brak atrybutu org.eclipse.jst.component.dependency.

Paweł
źródło
-1

Sprawdź, czy słoiki są poprawnie importowane. Zaimportowałem je przy użyciu ścieżki kompilacji. Ale nie rozpoznał słoika w folderze WAR / lib. Później skopiowałem ten sam słoik do folderu war / lib . Teraz działa dobrze. Możesz odświeżyć / wyczyścić swój projekt.

Sibichakravarthy Gunasekaran
źródło
-2

Witajcie przyjaciele, jeśli w kodzie hibernacji pojawia się wyjątek, który nie został znaleziony przez klasę, to jest to problem z plikami jar. Są to głównie dwa problemy 1. Chcę
powiedzieć, że twoja stara wersja hibernacji może mieć numer 3.2 poniżej. działa w porządku

2. pierwsze połączenie z bazą danych Checkes. Jeśli baza danych działa poprawnie, to był błąd w twoim programie lub pliku jar.

proszę sprawdzić te dwa problemy, jeśli również nie działa, próbowałeś IDE. Korzystam z wersji Netbeanside 6.9. Hibernacja działa dobrze. Nie pojawia się żaden błąd z klasy, a nie wyjątek ..

Mam nadzieję, że to pomaga więcej

Krishnarjun
źródło
-2

Rozwiązaniem jest dodanie pliku jar common-logging.xx

Sachin
źródło
-2

spróbuj dodać tę zależność org.apache.commons commons-exec 1.3

użytkownik1244663
źródło
-3

Jeśli wszystko inne zawiedzie, tak jak u mnie, spróbuj umieścić commons-logowanie-xyzjar w katalogu lib Tomcat. To rozwiązało problem! BTW, używam Tomcat 6.

Bob V.
źródło
nazywać coś? o czym mówisz?
Bob V.