NoClassDefFoundError causato da ClassNotFoundException

Pubblicità

Hero467

Utente Attivo
Messaggi
695
Reazioni
406
Punteggio
75
Ciao a tutti,
ho iniziato a scrivere un progettino che si sta rivelando essere più articolato di quello che pensavo, quindi volevo dargli una sistemata e pulire un po di classi, così non sarei impazzito andando avanti.
Prima però volevo provarlo, per vedere se il casino che avevo scritto era almeno un casino funzionante, quindi ho compilato tutto con maven è l'ho eseguito in una cartella di test.
Il punto è: mentre lo eseguivo è andato avanti per un po, facendo quello che doveva fare, poi mi viene fuori questo errore:
Codice:
Exception in thread "main" java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/JsonProcessingException
    at com.sourced.commands.Start.makeJson(Start.java:63)
    at com.sourced.commands.Start.populateSourcedDir(Start.java:48)
    at com.sourced.commands.Start.init(Start.java:75)
    at com.sourced.commandline.CommandLine.detectCommand(CommandLine.java:52)
    at com.sourced.commandline.CommandLine.init(CommandLine.java:23)
    at com.sourced.Sourced.main(Sourced.java:8)
Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.core.JsonProcessingException
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    ... 6 more

La classe in questione io l'ho inclusa nel file pom.xml come faccio sempre, con queste righe:
Codice:
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-core</artifactId>
  <version>2.15.2</version>
</dependency>
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.15.2</version>
</dependency>

E infatti jackson-databind viene importata correttamente e utilizzata.
Jackson-core, più specificatamente l'eccezione JacksonProcessingException, non viene trovata durante l'esecuzione.

Come posso risolvere?
 
Provo comunque ad aiutarti anche se non conosco la libreria. In rete ho visto citare anche questa dipendenza che deve avere la stessa versione delle altre due:

<artifactId>jackson-annotations</artifactId>
 
Ciao, non so se ancora ti serve aiuto.
L'errore che vedi implica la mancanza di una classe nel classpath. Quando una classe non viene portata (durante il processo di build) nel pacchetto finale può accadere per 3 motivi:
1) ti manca una dipendenza nel pom.xml (nel tuo caso jackson-core o jackson-annotations) ma hai detto di averle messe nel pom. Magari fai una prova con un maven update con force update snapshot (-U).
2) il tuo IDE si è scimunito! Un bel refresh, clean cache, invalidate cache, rebuild o come cavolo lo chiama il tuo IDE potrebbe sbloccare.. in casi estremi è necessario cancellare la cartella della tua dipendenza dalla .m2, nel tuo caso la cartella fasterxml.
3) la più probabile. Se ad esempio stai usando springboot esso porta già in sé la dipendenza Jackson e pertanto potrebbe verificarsi una "collisione" tra la versione che stai tentando di scaricare tu nel pom.xml e quella che spring porta al suo interno.
Per risolvere, anzitutto, fai un test rimuovendo TUTTE le dipendenze Jackson dal tuo pom. Se ancora non va rimettile tutte, ma stavolta senza il tag <version> così vedrai ciò che spring porta al suo interno e cosa no. A quel punto dovrai solo aggiungere le dipendenze che non hai già nel classpath per conto di spring ma devi anche assicurarti di specificare la stessa identica versione delle dipendenze che usa spring per Jackson.

Le cause sono solo queste, non ne esistono di altre. La risoluzione invece potrebbe variare lievemente da ciò che ti ho indicato
 
Ciao, non so se ancora ti serve aiuto.
L'errore che vedi implica la mancanza di una classe nel classpath. Quando una classe non viene portata (durante il processo di build) nel pacchetto finale può accadere per 3 motivi:
1) ti manca una dipendenza nel pom.xml (nel tuo caso jackson-core o jackson-annotations) ma hai detto di averle messe nel pom. Magari fai una prova con un maven update con force update snapshot (-U).
2) il tuo IDE si è scimunito! Un bel refresh, clean cache, invalidate cache, rebuild o come cavolo lo chiama il tuo IDE potrebbe sbloccare.. in casi estremi è necessario cancellare la cartella della tua dipendenza dalla .m2, nel tuo caso la cartella fasterxml.
3) la più probabile. Se ad esempio stai usando springboot esso porta già in sé la dipendenza Jackson e pertanto potrebbe verificarsi una "collisione" tra la versione che stai tentando di scaricare tu nel pom.xml e quella che spring porta al suo interno.
Per risolvere, anzitutto, fai un test rimuovendo TUTTE le dipendenze Jackson dal tuo pom. Se ancora non va rimettile tutte, ma stavolta senza il tag <version> così vedrai ciò che spring porta al suo interno e cosa no. A quel punto dovrai solo aggiungere le dipendenze che non hai già nel classpath per conto di spring ma devi anche assicurarti di specificare la stessa identica versione delle dipendenze che usa spring per Jackson.

Le cause sono solo queste, non ne esistono di altre. La risoluzione invece potrebbe variare lievemente da ciò che ti ho indicato
Ciao, grazie per l'aiuto. Ti rispondo in ordine:
1 lo pensavo anche io, ma per essere sicuro ho importato tutte le dipendenze possibili, e ho verificato personalmente che ci fossero le classi che mi servivano nei corrispondenti jar
2 provato anche questo, e per sicurezza ho copiato idea, con un altro progetto dal contenuto identico, ma il risultato è sempre quello
3 non sto usando springboot, solo maven puro e semplice (e poi gradle, ma mi dà comunque lo stesso errore). Ho già provato a rimuovere tutte le dipendenze e reinstallarle, ma niente. Cosa curiosa però: se lancio gradlew run non mi dà l'errore.
Credo proprio che il problema sia nel codice che ho scritto o nella dipendenza che sto utilizzando (più probabilmente la prima). Adesso ho provato a fare un downgrade di Jackson, ma devo ancora testare essendo fuori casa senza computer
 
Ciao, grazie per l'aiuto. Ti rispondo in ordine:
1 lo pensavo anche io, ma per essere sicuro ho importato tutte le dipendenze possibili, e ho verificato personalmente che ci fossero le classi che mi servivano nei corrispondenti jar
2 provato anche questo, e per sicurezza ho copiato idea, con un altro progetto dal contenuto identico, ma il risultato è sempre quello
3 non sto usando springboot, solo maven puro e semplice (e poi gradle, ma mi dà comunque lo stesso errore). Ho già provato a rimuovere tutte le dipendenze e reinstallarle, ma niente. Cosa curiosa però: se lancio gradlew run non mi dà l'errore.
Credo proprio che il problema sia nel codice che ho scritto o nella dipendenza che sto utilizzando (più probabilmente la prima). Adesso ho provato a fare un downgrade di Jackson, ma devo ancora testare essendo fuori casa senza computer
Se può essere d'aiuto fai un git pubblico o qualcosa di simile, magari domani provo a scaricare e buildare io in locale. Non sono molto esperto di gradle, ma se (come detto al punto 3) usa un repository differente dal tuo locale (cartella lib o cartella repository di maven) allora si spiega perché funziona. Mi inforno un po' sul comando gradle
 
Purtroppo al momento sono all'estero senza computer, e non torno fino a sabato. Appena torno però metto la repo, sia con maven che gradle.

Comunque nel rifare il progetto sto usando maven di nuovo, sperando che il downgrade funzioni
 
Pubblicità
Pubblicità
Indietro
Top