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

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:



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>


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>

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.


8

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


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.


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>

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.


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

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.


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.



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


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.


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


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 .


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.


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


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.


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


-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




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


nazywać coś? o czym mówisz?
Bob V.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.