Ottenere java.lang.ClassNotFoundException: eccezione org.apache.commons.logging.LogFactory


188

sto eseguendo un semplice programma di Iniezione delle dipendenze della primavera e ricevo questa eccezione. Ho già incluso i file common-logging1.1.1.jar e spring.jar. Potresti aiutarmi, per favore?

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
Innanzitutto, verifica che il tuo percorso di classe sia effettivamente corretto. In secondo luogo, prova ad aprire il jar e verifica che contenga effettivamente la classe org.apache.commons.logging.LogFactory. Infine, prova a eseguire il debug impostando un punto di interruzione nel caricatore di classi.
Kolibri,

2
Tutte le risposte che seguono suggeriscono commons-loggingun passo indietro. Usa jcl-over-slf4jinvece.
opyate,

In Android aggiungi testCompile 'registrazione dei beni comuni: registrazione dei beni comuni: 1.1.1' in app.gradle
Roger Garzon Nieto

Risposte:



114

Se stai usando Maven per gestire le dipendenze, aggiungi la seguente riga nel tuo pom.xml:

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


19

commons-logging-1.1.1.jar o jcl-over-slf4j-1.7.6.jar al

Se stai usando Maven, usa il codice qui sotto.

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

2
Includere "jcl-over-slf4j" è stata l'unica soluzione che funziona per me. Avevo già il disboscamento nelle mie dipendenze.
Italo Borssatto,

Sto usando Spring-Boot versione 2.0.1.RELEASE con Maven. Questa è stata l'unica soluzione che ha funzionato anche per me.
Carlos Nantes,

18

Ho avuto lo stesso problema e l'ho risolto semplicemente aggiungendo il commons-logging.jarpercorso della classe.


8

L'aggiunta di commons-logging.jar o commons-logging-1.1.jar risolverà questo ...


6

Ho già incluso common-logging1.1.1.jar e ...

Sei sicuro di aver digitato correttamente il nome del file JAR? Penso che dovrebbe essere probabilmente commons-logging-1.1.1.jar(notare il supplemento -nel nome). Controlla anche se il nome della directory è corretto.

NoClassDefFoundError significa sempre che non è possibile trovare una classe, quindi molto probabilmente il tuo percorso di classe non è corretto.


2
NoClassDefFoundErrorpuò anche essere causato da altri casi angolari, come quando gli inizializzatori di classe falliscono in circostanze oscure.
Skaffman,

Inoltre, se ottiene un NoClassDefFoundError perché l'istanza della classe ha avuto esito negativo, avrebbe dovuto ottenere prima un'eccezione ExceptionInInitializerError (a meno che, naturalmente, non fosse stata rilevata silenziosamente).
Kolibri,

E non dimenticare la "s"commons-logging-1.1.1.jar
Glenn Lawrence,

@GlennLawrence Grazie, risolto il nome.
Jesper,

6

L'impostazione dell'ambito per la compilazione l'ha fatto per me

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

1
Risolto la mia situazione Durante l'esecuzione dei casi di test di Mockito, ho riscontrato questo errore e ho risolto questa dipendenza in pom.xml.
venugopal,

4

Prova a ripulire completamente la directory di destinazione / distribuzione per l'app per sbarazzarti di qualsiasi vasetto di libreria stantio. Crea una nuova build e verifica che commons-logging.jar sia effettivamente inserito nella cartella lib corretta. Potrebbe non essere incluso durante la creazione della libreria per l'applicazione.


4

Problema risolto aggiungendo commons-logging.jar

I file imp sono,

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

Due opzioni (almeno):

  1. Aggiungi il jar di registrazione comune al tuo file copiandolo in una cartella locale.

Nota: il collegamento del jar può portare a problemi con il server e forse il motivo per cui viene aggiunto al percorso di compilazione ma non risolve il problema di avvio del server.

Quindi non puntare il vaso verso una cartella esterna.

O...

  1. Se davvero non vuoi aggiungerlo localmente perché stai condividendo il vaso tra i progetti, allora ...

Se si utilizza un'istanza del server tc, è necessario aggiungere il jar come jar esterno alle configurazioni di esecuzione dell'istanza del server.

vai a run as, esegui configurazioni ..., {la tua istanza del server tc}, quindi la scheda Percorso classe.

Quindi aggiungere il barattolo di registrazione comune.


3

Ho avuto lo stesso problema di te. Alla fine ho controllato la versione di Apache che possedeva la classe. Ho scoperto che la versione 1.0.4 ha la classe.

Prova a utilizzare la versione 1.0.4 anziché 1.1.X o 1.2.X

Le mie dipendenze:

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

Il mio codice 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());

Il mio risultato:

130489168

Controlla anche che le dipendenze di Maven siano ben importate.



0

Controlla se commons-logging.jar è stato aggiunto alle tue librerie e al percorso di classe .. Ho avuto lo stesso problema e questo è stato per questo. dhammikas-


0

In genere assegno il classpath a una variabile e quindi lo verifico. Ho scritto un piccolo script ruby ​​che includo nei miei script di avvio che convalida il percorso di classe prima di avviare Java . La convalida del percorso di classe prima dell'avvio di JVM mi ha fatto risparmiare un sacco di tempo nella risoluzione di questi tipi di problemi.


2
Dovresti prendere in considerazione l'utilizzo di strumenti come Maven.
Neovibrant,

0

Ehi, stavo seguendo il tutorial su tutorialpoint.com. Aggiungi dopo aver completato il passaggio 2 - Installa l'API di registrazione comune di Apache: devi importare librerie jar esterne nel progetto dai file scaricati in questo passaggio. Per me il nome del file era " commons-logging-1.1.1 ".


0

Se lo stai eseguendo su Android, tieni presente che a quanto pare il java.beanspacchetto non è completo su Android. Per tentare di risolverlo su Android prova quanto segue:

  1. Scarica android-java-air-bridge.jar (attualmente il pulsante di download si trova in fondo alla pagina o il link diretto qui )
  2. Copia il jar scaricato nella tua directory [APPROOT] / app / libs (o collega il jar in altro modo)
  3. Cambia le import ***affermazioni in quelle di air-bridge. Ad esempio import javadz.beanutils.BeanUtilsinvece diimport org.apache.commons.beanutils.BeanUtils;
  4. Pulisci e ricostruisci il progetto

fonte 1 , fonte 2

Mi scuso perché mi rendo conto che questo non risponde esattamente alla domanda, anche se questa pagina SO si presenta molto durante la ricerca di NoClassDefFoundError: Failed resolution of: beanUtilserrori generati da Android .


0

Stavo ottenendo lo stesso errore mentre era presente il vaso. Nessuna soluzione ha funzionato. Ciò che ha funzionato è stato cancellare il vaso dal file system (dalla directory .m2) e quindi pulire il progetto maven.


0

Ho lo stesso problema in eclipse IDE, la mia soluzione era: fare clic destro in Il mio progetto> Proprietà

inserisci qui la descrizione dell'immagine

Fai clic su Maven e scrivi: jar nel Progetto Active Maven

inserisci qui la descrizione dell'immagine

Infine, applica e chiudi


0

Nel mio caso stavo testando un'app Tomcat in eclipse e ho riscontrato questo errore. L'ho risolto controllando il .classpathfile e ho corretto questa voce:

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

L'attributo org.eclipse.jst.component.dependencyera mancante.


-1

Controlla se i vasetti sono importati correttamente. Li ho importati usando il percorso di costruzione. Ma non ha riconosciuto il vaso nella cartella WAR / lib. Successivamente, ho copiato lo stesso jar nella cartella war / lib . Funziona bene ora. Puoi aggiornare / pulire il tuo progetto.


-2

Ciao amici, se si ottiene un'eccezione non di classe trovata nel codice di ibernazione è il problema dei file jar. Ci sono principalmente due problemi
1. Voglio dire che la tua vecchia versione funzionante di ibernazione potrebbe essere 3.2 sotto, quindi se provi sopra 3.6 lo farà funziona bene

2.Prima verifica la connessione al database. Se il database funziona correttamente, è stato un errore nel tuo programma o nel file jar.

controlla questi due prioblemi se anche non funziona hai provato a IDE. Sto usando netbeanside versione 6.9. Qui ibernazione funziona benissimo. Non si ottiene alcun errore dalla classe non trovata eccezione ..

Spero che questo aiuti di più


-2

La soluzione è aggiungere il file jar common-logging.xx


-2

prova ad aggiungere questa dipendenza org.apache.commons commons-exec 1.3


-3

Se tutto il resto fallisce, come per me, prova a mettere il commons-logging-xyzjar nella tua directory lib Tomcat. Ha risolto il problema! A proposito, sto usando Tomcat 6.


come si chiama? di cosa stai parlando?
Bob V.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.